package utils

import "slices"

type regionS3ElbAccount struct {
	RegionName string
	ElbAccount string
}

// Regions available before August 2022
// see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/enable-access-logging.html
var regionS3ElbAccounts = []regionS3ElbAccount{
	{RegionName: "US East (N. Virginia)", ElbAccount: "127311923021"},
	{RegionName: "US East (Ohio)", ElbAccount: "033677994240"},
	{RegionName: "US West (N. California)", ElbAccount: "027434742980"},
	{RegionName: "US West (Oregon)", ElbAccount: "797873946194"},
	{RegionName: "Africa (Cape Town)", ElbAccount: "098369216593"},
	{RegionName: "Asia Pacific (Hong Kong)", ElbAccount: "754344448648"},
	{RegionName: "Asia Pacific (Jakarta)", ElbAccount: "589379963580"},
	{RegionName: "Asia Pacific (Mumbai)", ElbAccount: "718504428378"},
	{RegionName: "Asia Pacific (Osaka)", ElbAccount: "383597477331"},
	{RegionName: "Asia Pacific (Seoul)", ElbAccount: "600734575887"},
	{RegionName: "Asia Pacific (Singapore)", ElbAccount: "114774131450"},
	{RegionName: "Asia Pacific (Sydney)", ElbAccount: "783225319266"},
	{RegionName: "Asia Pacific (Tokyo)", ElbAccount: "582318560864"},
	{RegionName: "Canada (Central)", ElbAccount: "985666609251"},
	{RegionName: "Europe (Frankfurt)", ElbAccount: "054676820928"},
	{RegionName: "Europe (Ireland)", ElbAccount: "156460612806"},
	{RegionName: "Europe (London)", ElbAccount: "652711504416"},
	{RegionName: "Europe (Milan)", ElbAccount: "635631232127"},
	{RegionName: "Europe (Paris)", ElbAccount: "009996457667"},
	{RegionName: "Europe (Stockholm)", ElbAccount: "897822967062"},
	{RegionName: "Middle East (Bahrain)", ElbAccount: "076674570225"},
	{RegionName: "South America (São Paulo)", ElbAccount: "507241528517"},
}

func GetS3PolicyElbAccountByRegionFullName(region string) string {
	index := slices.IndexFunc(regionS3ElbAccounts, func(r regionS3ElbAccount) bool { return r.RegionName == region })
	if index >= 0 {
		return regionS3ElbAccounts[index].ElbAccount
	}
	return ""
}
func GetS3PolicyElbAccountByRegion(region string) string {
	index := slices.IndexFunc(AwsRegions, func(e AwsRegion) bool {
		return e.Name == region
	})
	if index >= 0 {
		return GetS3PolicyElbAccountByRegionFullName(AwsRegions[index].FullName)
	}
	return ""
}
