variable "cluster_name" {
  description = "EKS cluster name"
  type        = string
}

variable "kubernetes_version" {
  description = "Kubernetes version"
  type        = string
  default     = "1.30"
}

variable "subnet_ids" {
  description = "Subnet IDs for the cluster control plane ENIs"
  type        = list(string)
}

variable "security_group_ids" {
  description = "Additional security group IDs for the cluster"
  type        = list(string)
  default     = []
}

variable "endpoint_private_access" {
  description = "Enable private API server endpoint"
  type        = bool
  default     = true
}

variable "endpoint_public_access" {
  description = "Enable public API server endpoint"
  type        = bool
  default     = false
}

variable "public_access_cidrs" {
  description = "CIDR blocks for public API access (requires endpoint_public_access = true)"
  type        = list(string)
  default     = []
}

variable "cluster_log_types" {
  description = "Control plane log types to enable"
  type        = list(string)
  default     = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
}

variable "secrets_encryption_kms_key_arn" {
  description = "KMS key ARN for encrypting Kubernetes secrets"
  type        = string
  default     = null
}

variable "cluster_addons" {
  description = "Map of EKS add-ons to install"
  type = map(object({
    version                  = optional(string, null)
    resolve_conflicts        = optional(string, "OVERWRITE")
    service_account_role_arn = optional(string, null)
  }))
  default = {
    vpc-cni            = {}
    coredns            = {}
    kube-proxy         = {}
    aws-ebs-csi-driver = {}
  }
}

variable "access_entries" {
  description = "Map of IAM principal ARNs to cluster access entry configurations"
  type = map(object({
    principal_arn     = string
    type              = optional(string, "STANDARD")
    kubernetes_groups = optional(list(string), [])
    policy_associations = optional(list(object({
      policy_arn   = string
      access_scope = optional(string, "cluster")
      namespaces   = optional(list(string), [])
    })), [])
  }))
  default = {}
}

variable "tags" {
  description = "Resource tags to apply to all resources"
  type        = map(string)
  default     = {}
}
