package utils

import (
	"slices"

	"github.com/juju/errors"
)

type ElbServiceEndpoint struct {
	FullName        string
	Name            string
	Endpoint        string
	HostedZoneId    string
	NlbHostedZoneId string
}

// see https://docs.aws.amazon.com/general/latest/gr/elb.html
var ElbServiceEndpoints = []ElbServiceEndpoint{
	{FullName: "US East (Ohio)", Name: "us-east-2", Endpoint: "elasticloadbalancing.us-east-2.amazonaws.com", HostedZoneId: "Z3AADJGX6KTTL2", NlbHostedZoneId: "ZLMOA37VPKANP"},
	{FullName: "US East (N. Virginia)", Name: "us-east-1", Endpoint: "elasticloadbalancing.us-east-1.amazonaws.com", HostedZoneId: "Z35SXDOTRQ7X7K", NlbHostedZoneId: "Z26RNL4JYFTOTI"},
	{FullName: "US West (N. California)", Name: "us-west-1", Endpoint: "elasticloadbalancing.us-west-1.amazonaws.com", HostedZoneId: "Z368ELLRRE2KJ0", NlbHostedZoneId: "Z24FKFUX50B4VW"},
	{FullName: "US West (Oregon)", Name: "us-west-2", Endpoint: "elasticloadbalancing.us-west-2.amazonaws.com", HostedZoneId: "Z1H1FL5HABSF5", NlbHostedZoneId: "Z18D5FSROUN65G"},
	{FullName: "Africa (Cape Town)", Name: "af-south-1", Endpoint: "elasticloadbalancing.af-south-1.amazonaws.com", HostedZoneId: "Z268VQBMOI5EKX", NlbHostedZoneId: "Z203XCE67M25HM"},
	{FullName: "Asia Pacific (Hong Kong)", Name: "ap-east-1", Endpoint: "elasticloadbalancing.ap-east-1.amazonaws.com", HostedZoneId: "Z3DQVH9N71FHZ0", NlbHostedZoneId: "Z12Y7K3UBGUAD1"},
	{FullName: "Asia Pacific (Hyderabad)", Name: "ap-south-2", Endpoint: "elasticloadbalancing.ap-south-2.amazonaws.com", HostedZoneId: "Z0173938T07WNTVAEPZN", NlbHostedZoneId: "Z0711778386UTO08407HT"},
	{FullName: "Asia Pacific (Jakarta)", Name: "ap-southeast-3", Endpoint: "elasticloadbalancing.ap-southeast-3.amazonaws.com", HostedZoneId: "Z08888821HLRG5A9ZRTER", NlbHostedZoneId: "Z01971771FYVNCOVWJU1G"},
	{FullName: "Asia Pacific (Melbourne)", Name: "ap-southeast-4", Endpoint: "elasticloadbalancing.ap-southeast-4.amazonaws.com", HostedZoneId: "Z09517862IB2WZLPXG76F", NlbHostedZoneId: "Z01156963G8MIIL7X90IV"},
	{FullName: "Asia Pacific (Malaysia)", Name: "ap-southeast-5", Endpoint: "elasticloadbalancing.ap-southeast-5.amazonaws.com", HostedZoneId: "Z06010284QMVVW7WO5J", NlbHostedZoneId: "Z026317210H9ACVTRO6FB"},
	{FullName: "Asia Pacific (New Zealand)", Name: "ap-southeast-6", Endpoint: "elasticloadbalancing.ap-southeast-6.amazonaws.com", HostedZoneId: "Z023301818UFJ50CIO0MV", NlbHostedZoneId: "Z01392953RKV2Q3RBP0KU"},
	{FullName: "Asia Pacific (Thailand)", Name: "ap-southeast-7", Endpoint: "elasticloadbalancing.ap-southeast-7.amazonaws.com", HostedZoneId: "Z0390008CMBRTHFGWBCB", NlbHostedZoneId: "Z054363131YWATEMWRG5L"},
	{FullName: "Asia Pacific (Mumbai)", Name: "ap-south-1", Endpoint: "elasticloadbalancing.ap-south-1.amazonaws.com", HostedZoneId: "ZP97RAFLXTNZK", NlbHostedZoneId: "ZVDDRBQ08TROA"},
	{FullName: "Asia Pacific (Osaka)", Name: "ap-northeast-3", Endpoint: "elasticloadbalancing.ap-northeast-3.amazonaws.com", HostedZoneId: "Z5LXEXXYW11ES", NlbHostedZoneId: "Z1GWIQ4HH19I5X"},
	{FullName: "Asia Pacific (Seoul)", Name: "ap-northeast-2", Endpoint: "elasticloadbalancing.ap-northeast-2.amazonaws.com", HostedZoneId: "ZWKZPGTI48KDX", NlbHostedZoneId: "ZIBE1TIR4HY56"},
	{FullName: "Asia Pacific (Singapore)", Name: "ap-southeast-1", Endpoint: "elasticloadbalancing.ap-southeast-1.amazonaws.com", HostedZoneId: "Z1LMS91P8CMLE5", NlbHostedZoneId: "ZKVM4W9LS7TM"},
	{FullName: "Asia Pacific (Sydney)", Name: "ap-southeast-2", Endpoint: "elasticloadbalancing.ap-southeast-2.amazonaws.com", HostedZoneId: "Z1GM3OXH4ZPM65", NlbHostedZoneId: "ZCT6FZBF4DROD"},
	{FullName: "Asia Pacific (Tokyo)", Name: "ap-northeast-1", Endpoint: "elasticloadbalancing.ap-northeast-1.amazonaws.com", HostedZoneId: "Z14GRHDCWA56QT", NlbHostedZoneId: "Z31USIVHYNEOWT"},
	{FullName: "Canada (Central)", Name: "ca-central-1", Endpoint: "elasticloadbalancing.ca-central-1.amazonaws.com", HostedZoneId: "ZQSVJUPU6J1EY", NlbHostedZoneId: "Z2EPGBW3API2WT"},
	{FullName: "Canada West (Calgary)", Name: "ca-west-1", Endpoint: "elasticloadbalancing.ca-west-1.amazonaws.com", HostedZoneId: "Z06473681N0SF6OS049SD", NlbHostedZoneId: "Z02754302KBB00W2LKWZ9"},
	{FullName: "China (Beijing)", Name: "cn-north-1", Endpoint: "elasticloadbalancing.cn-north-1.amazonaws.com.cn", HostedZoneId: "Z1GDH35T77C1KE", NlbHostedZoneId: "Z3QFB96KMJ7ED6"},
	{FullName: "China (Ningxia)", Name: "cn-northwest-1", Endpoint: "elasticloadbalancing.cn-northwest-1.amazonaws.com.cn", HostedZoneId: "ZM7IZAIOVVDZF", NlbHostedZoneId: "ZQEIKTCZ8352D"},
	{FullName: "Europe (Frankfurt)", Name: "eu-central-1", Endpoint: "elasticloadbalancing.eu-central-1.amazonaws.com", HostedZoneId: "Z215JYRZR1TBD5", NlbHostedZoneId: "Z3F0SRJ5LGBH90"},
	{FullName: "Europe (Ireland)", Name: "eu-west-1", Endpoint: "elasticloadbalancing.eu-west-1.amazonaws.com", HostedZoneId: "Z32O12XQLNTSW2", NlbHostedZoneId: "Z2IFOLAFXWLO4F"},
	{FullName: "Europe (London)", Name: "eu-west-2", Endpoint: "elasticloadbalancing.eu-west-2.amazonaws.com", HostedZoneId: "ZHURV8PSTC4K8", NlbHostedZoneId: "ZD4D7Y8KGAS4G"},
	{FullName: "Europe (Milan)", Name: "eu-south-1", Endpoint: "elasticloadbalancing.eu-south-1.amazonaws.com", HostedZoneId: "Z3ULH7SSC9OV64", NlbHostedZoneId: "Z23146JA1KNAFP"},
	{FullName: "Europe (Paris)", Name: "eu-west-3", Endpoint: "elasticloadbalancing.eu-west-3.amazonaws.com", HostedZoneId: "Z3Q77PNBQS71R4", NlbHostedZoneId: "Z1CMS0P5QUZ6D5"},
	{FullName: "Europe (Spain)", Name: "eu-south-2", Endpoint: "elasticloadbalancing.eu-south-2.amazonaws.com", HostedZoneId: "Z0956581394HF5D5LXGAP", NlbHostedZoneId: "Z1011216NVTVYADP1SSV"},
	{FullName: "Europe (Stockholm)", Name: "eu-north-1", Endpoint: "elasticloadbalancing.eu-north-1.amazonaws.com", HostedZoneId: "Z23TAZ6LKFMNIO", NlbHostedZoneId: "Z1UDT6IFJ4EJM"},
	{FullName: "Europe (Zurich)", Name: "eu-central-2", Endpoint: "elasticloadbalancing.eu-central-2.amazonaws.com", HostedZoneId: "Z06391101F2ZOEP8P5EB3", NlbHostedZoneId: "Z02239872DOALSIDCX66S"},
	{FullName: "Israel (Tel Aviv)", Name: "il-central-1", Endpoint: "elasticloadbalancing.il-central-1.amazonaws.com", HostedZoneId: "Z09170902867EHPV2DABU", NlbHostedZoneId: "Z0313266YDI6ZRHTGQY4"},
	{FullName: "Middle East (Bahrain)", Name: "me-south-1", Endpoint: "elasticloadbalancing.me-south-1.amazonaws.com", HostedZoneId: "ZS929ML54UICD", NlbHostedZoneId: "Z3QSRYVP46NYYV"},
	{FullName: "Middle East (UAE)", Name: "me-central-1", Endpoint: "elasticloadbalancing.me-central-1.amazonaws.com", HostedZoneId: "Z08230872XQRWHG2XF6I", NlbHostedZoneId: "Z00282643NTTLPANJJG2P"},
	{FullName: "South America (São Paulo)", Name: "sa-east-1", Endpoint: "elasticloadbalancing.sa-east-1.amazonaws.com", HostedZoneId: "Z2P70J7HTTTPLU", NlbHostedZoneId: "ZTK26PT1VY4CU"},
	{FullName: "AWS GovCloud (US-East)", Name: "us-gov-east-1", Endpoint: "elasticloadbalancing.us-gov-east-1.amazonaws.com", HostedZoneId: "Z166TLBEWOO7G0", NlbHostedZoneId: "Z1ZSMQQ6Q24QQ8"},
	{FullName: "AWS GovCloud (US-West)", Name: "us-gov-west-1", Endpoint: "elasticloadbalancing.us-gov-west-1.amazonaws.com", HostedZoneId: "Z33AYJ8TM3BH4J", NlbHostedZoneId: "ZMG1MZ2THAWF1"},
}

func GetElbServiceNlbHostedZoneId(region string) (string, error) {
	index := slices.IndexFunc(ElbServiceEndpoints, func(e ElbServiceEndpoint) bool {
		return e.Name == region

	})
	if index < 0 {
		return "", errors.NotFoundf("ELB service endpoint %s. Please see https://docs.aws.amazon.com/general/latest/gr/elb.html and add a new region", region)
	}
	return ElbServiceEndpoints[index].NlbHostedZoneId, nil
}
