// Copyright 2026 Microsoft Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package validation

import "k8s.io/apimachinery/pkg/util/sets"

// enabledNodePoolAzureVMSizes returns the set of VM sizes that are enabled in the ARO-HCP service for node pools.
// It is a superset of the list of VM sizes that are supported across all Azure regions that the ARO-HCP service is
// available in. This means that it is not a perfect check, but it is a good enough to detect many cases.
// TODO at some point we might want to fully remove this restriction and allow any VM size at this level, so we can
// automatically support all VM Sizes out of the box. For now we restrict it to the set here.
// For now this list is also maintained on Cluster Service config files, but we will remove it from there in the
// near future.
func enabledNodePoolAzureVMSizes() sets.Set[string] {
	return sets.New[string](
		"Standard_D128s_v6",
		"Standard_D16as_v4",
		"Standard_D16as_v5",
		"Standard_D16pds_v6",
		"Standard_D16plds_v6",
		"Standard_D16pls_v6",
		"Standard_D16ps_v6",
		"Standard_D16s_v3",
		"Standard_D16s_v4",
		"Standard_D16s_v5",
		"Standard_D16s_v6",
		"Standard_D192s_v6",
		"Standard_D2pds_v6",
		"Standard_D2plds_v6",
		"Standard_D2pls_v6",
		"Standard_D2ps_v6",
		"Standard_D2s_v6",
		"Standard_D32as_v4",
		"Standard_D32as_v5",
		"Standard_D32pds_v6",
		"Standard_D32plds_v6",
		"Standard_D32pls_v6",
		"Standard_D32ps_v6",
		"Standard_D32s_v3",
		"Standard_D32s_v4",
		"Standard_D32s_v5",
		"Standard_D32s_v6",
		"Standard_D48pds_v6",
		"Standard_D48plds_v6",
		"Standard_D48pls_v6",
		"Standard_D48ps_v6",
		"Standard_D48s_v6",
		"Standard_D4as_v4",
		"Standard_D4as_v5",
		"Standard_D4pds_v6",
		"Standard_D4plds_v6",
		"Standard_D4pls_v6",
		"Standard_D4ps_v6",
		"Standard_D4s_v3",
		"Standard_D4s_v4",
		"Standard_D4s_v5",
		"Standard_D4s_v6",
		"Standard_D64as_v4",
		"Standard_D64as_v5",
		"Standard_D64pds_v6",
		"Standard_D64plds_v6",
		"Standard_D64pls_v6",
		"Standard_D64ps_v6",
		"Standard_D64s_v4",
		"Standard_D64s_v5",
		"Standard_D64s_v6",
		"Standard_D8as_v4",
		"Standard_D8as_v5",
		"Standard_D8pds_v6",
		"Standard_D8plds_v6",
		"Standard_D8pls_v6",
		"Standard_D8ps_v6",
		"Standard_D8s_v3",
		"Standard_D8s_v4",
		"Standard_D8s_v5",
		"Standard_D8s_v6",
		"Standard_D96as_v4",
		"Standard_D96as_v5",
		"Standard_D96pds_v6",
		"Standard_D96plds_v6",
		"Standard_D96pls_v6",
		"Standard_D96ps_v6",
		"Standard_D96s_v5",
		"Standard_D96s_v6",
		"Standard_E104ids_v5",
		"Standard_E104is_v5",
		"Standard_E128s_v6",
		"Standard_E16as_v4",
		"Standard_E16as_v5",
		"Standard_E16pds_v6",
		"Standard_E16ps_v6",
		"Standard_E16s_v3",
		"Standard_E16s_v4",
		"Standard_E16s_v5",
		"Standard_E16s_v6",
		"Standard_E192is_v6",
		"Standard_E20as_v4",
		"Standard_E20as_v5",
		"Standard_E20s_v4",
		"Standard_E20s_v5",
		"Standard_E20s_v6",
		"Standard_E2pds_v6",
		"Standard_E2ps_v6",
		"Standard_E2s_v6",
		"Standard_E32as_v4",
		"Standard_E32as_v5",
		"Standard_E32pds_v6",
		"Standard_E32ps_v6",
		"Standard_E32s_v3",
		"Standard_E32s_v4",
		"Standard_E32s_v5",
		"Standard_E32s_v6",
		"Standard_E48as_v4",
		"Standard_E48as_v5",
		"Standard_E48pds_v6",
		"Standard_E48ps_v6",
		"Standard_E48s_v4",
		"Standard_E48s_v5",
		"Standard_E48s_v6",
		"Standard_E4as_v4",
		"Standard_E4pds_v6",
		"Standard_E4ps_v6",
		"Standard_E4s_v3",
		"Standard_E4s_v4",
		"Standard_E4s_v5",
		"Standard_E4s_v6",
		"Standard_E64as_v4",
		"Standard_E64as_v5",
		"Standard_E64pds_v6",
		"Standard_E64ps_v6",
		"Standard_E64s_v4",
		"Standard_E64s_v5",
		"Standard_E64s_v6",
		"Standard_E80ids_v4",
		"Standard_E80is_v4",
		"Standard_E8as_v4",
		"Standard_E8as_v5",
		"Standard_E8pds_v6",
		"Standard_E8ps_v6",
		"Standard_E8s_v3",
		"Standard_E8s_v4",
		"Standard_E8s_v5",
		"Standard_E8s_v6",
		"Standard_E96as_v4",
		"Standard_E96as_v5",
		"Standard_E96ds_v5",
		"Standard_E96pds_v6",
		"Standard_E96ps_v6",
		"Standard_E96s_v5",
		"Standard_E96s_v6",
		"Standard_F16s_v2",
		"Standard_F32s_v2",
		"Standard_F4s_v2",
		"Standard_F72s_v2",
		"Standard_F8s_v2",
		"Standard_L16s_v3",
		"Standard_L16s_v4",
		"Standard_L2s_v4",
		"Standard_L32s_v3",
		"Standard_L32s_v4",
		"Standard_L48s_v3",
		"Standard_L48s_v4",
		"Standard_L4s_v4",
		"Standard_L64s_v3",
		"Standard_L64s_v4",
		"Standard_L80s_v4",
		"Standard_L8s_v3",
		"Standard_L8s_v4",
		"Standard_L96s_v4",
		"Standard_NC12s_v3",
		"Standard_NC16as_T4_v3",
		"Standard_NC24ads_A100_v4",
		"Standard_NC24rs_v3",
		"Standard_NC24s_v3",
		"Standard_NC40ads_H100_v5",
		"Standard_NC48ads_A100_v4",
		"Standard_NC4as_T4_v3",
		"Standard_NC64as_T4_v3",
		"Standard_NC6s_v3",
		"Standard_NC80adis_H100_v5",
		"Standard_NC8as_T4_v3",
		"Standard_NC96ads_A100_v4",
		"Standard_ND96isr_H200_v5",
	)
}
