# 全局变量定义

# 环境配置
variable "environment" {
  description = "部署环境 (dev, staging, production)"
  type        = string
  validation {
    condition     = contains(["dev", "staging", "production"], var.environment)
    error_message = "环境必须是 dev, staging, 或 production 之一。"
  }
}

variable "project_name" {
  description = "项目名称"
  type        = string
  default     = "mgmt"
}

variable "owner" {
  description = "资源所有者"
  type        = string
  default     = "ben"
}

# 网络配置
variable "vpc_cidr" {
  description = "VPC CIDR 块"
  type        = string
  default     = "10.0.0.0/16"
}

variable "availability_zones" {
  description = "可用区列表"
  type        = list(string)
  default     = ["a", "b", "c"]
}

# 计算资源配置
variable "instance_types" {
  description = "不同环境的实例类型"
  type = map(object({
    web    = string
    app    = string
    db     = string
    cache  = string
  }))
  default = {
    dev = {
      web   = "t3.micro"
      app   = "t3.small"
      db    = "t3.micro"
      cache = "t3.micro"
    }
    staging = {
      web   = "t3.small"
      app   = "t3.medium"
      db    = "t3.small"
      cache = "t3.small"
    }
    production = {
      web   = "t3.medium"
      app   = "t3.large"
      db    = "t3.medium"
      cache = "t3.medium"
    }
  }
}

# 标签配置
variable "common_tags" {
  description = "通用标签"
  type        = map(string)
  default = {
    Project     = "mgmt"
    ManagedBy   = "terraform"
    Owner       = "ben"
  }
}

# 云服务商特定配置
variable "cloud_providers" {
  description = "启用的云服务商"
  type        = list(string)
  default     = ["oracle", "huawei", "google", "digitalocean", "aws"]
}

# Oracle Cloud 配置
variable "oci_config" {
  description = "Oracle Cloud 配置"
  type = object({
    tenancy_ocid     = string
    user_ocid        = string
    fingerprint      = string
    private_key_path = string
    region           = string
  })
  default = {
    tenancy_ocid     = ""
    user_ocid        = ""
    fingerprint      = ""
    private_key_path = "~/.oci/oci_api_key.pem"
    region           = "ap-seoul-1"
  }
  sensitive = true
}

# 华为云配置
variable "huawei_config" {
  description = "华为云配置"
  type = object({
    access_key = string
    secret_key = string
    region     = string
  })
  default = {
    access_key = ""
    secret_key = ""
    region     = "cn-north-4"
  }
  sensitive = true
}

# Google Cloud 配置
variable "gcp_config" {
  description = "Google Cloud 配置"
  type = object({
    project_id   = string
    region       = string
    zone         = string
    credentials  = string
  })
  default = {
    project_id   = ""
    region       = "asia-northeast3"
    zone         = "asia-northeast3-a"
    credentials  = ""
  }
  sensitive = true
}

# DigitalOcean 配置
variable "do_config" {
  description = "DigitalOcean 配置"
  type = object({
    token  = string
    region = string
  })
  default = {
    token  = ""
    region = "sgp1"
  }
  sensitive = true
}

# AWS 配置
variable "aws_config" {
  description = "AWS 配置"
  type = object({
    access_key = string
    secret_key = string
    region     = string
  })
  default = {
    access_key = ""
    secret_key = ""
    region     = "ap-northeast-1"
  }
  sensitive = true
}