package resource

import "strings"

type NetworkResource string
type NetworkZonalResource string
type ClusterResource string

// managed by eks/shared_vpc.go
const (
	VPC            NetworkResource = ""
	ProviderConfig NetworkResource = ""
	EKS            NetworkResource = ""
	OIDCProvider   NetworkResource = ""

	// InternetGateway/internet
	// RouteTable/internet
	// Route/internet
	Internet NetworkResource = "internet"
	// Address/nat
	// NATGateway/nat
	// RouteTable/nat
	// Route/nat
	NAT NetworkZonalResource = "nat"

	SubnetPodsNodes    NetworkZonalResource = "pods-nodes"
	SubnetPrivateNLB   NetworkZonalResource = "private-nlb"
	SubnetPublicNLB    NetworkZonalResource = "public-nlb"
	SubnetControlPlane NetworkZonalResource = "control-plane"
	SubnetO11y         NetworkZonalResource = "o11y"
	SubnetVPCEndpoint  NetworkZonalResource = "vpc-endpoint"
	SubnetNAT                               = NAT

	LaunchTemplateControlPlane NetworkResource = "control-plane"
	NodeGroupControlPlane      NetworkResource = "control-plane"

	LaunchTemplateElasticTiFlash NetworkResource      = "elastic-tiflash"
	NodeGroupElasticTiFlash      NetworkZonalResource = "elastic-tiflash"

	SecurityGroupO11y NetworkResource = "o11y"

	// iam role for eks node
	IAMRoleNode                          NetworkResource = "node"
	IAMPolicyNodeCNI                     NetworkResource = "node-cni"
	IAMRolePolicyAttachmentNodeCNI       NetworkResource = IAMPolicyNodeCNI
	IAMRolePolicyAttachmentNodeECR       NetworkResource = "node-ecr"
	IAMRolePolicyAttachmentNodeEKSWorker NetworkResource = "node-eks-worker"

	// iam role for tikv
	IAMRoleTiKV                 ClusterResource = "tikv"
	IAMPolicyTiKV                               = IAMRoleTiKV
	IAMRolePolicyAttachmentTiKV                 = IAMRoleTiKV

	IAMRoleTiDB                 ClusterResource = "tidb"
	IAMPolicyTiDB                               = IAMRoleTiDB
	IAMRolePolicyAttachmentTiDB                 = IAMRoleTiDB
)

const (
	dataPlaneSuffix = "-data-plane"
)

func LaunchTemplateDataPlane(instanceType string) NetworkResource {
	prefix := strings.ReplaceAll(instanceType, ".", "-")
	return NetworkResource(prefix + dataPlaneSuffix)

}

func NodeGroupDataPlane(instanceType string) NetworkZonalResource {
	prefix := strings.ReplaceAll(instanceType, ".", "-")
	return NetworkZonalResource(prefix + dataPlaneSuffix)
}
