# Staging环境主配置文件

# 引入共享版本配置
terraform {
  required_version = ">= 1.6"
  
  required_providers {
    # Oracle Cloud Infrastructure
    oci = {
      source  = "oracle/oci"
      version = "~> 7.20"
    }
    
    # 其他常用提供商
    random = {
      source  = "hashicorp/random"
      version = "~> 3.1"
    }
    
    tls = {
      source  = "hashicorp/tls"
      version = "~> 4.0"
    }
    
    local = {
      source  = "hashicorp/local"
      version = "~> 2.1"
    }
    
    # Consul Provider
    consul = {
      source  = "hashicorp/consul"
      version = "~> 2.22.0"
    }
    
    # HashiCorp Vault Provider
    vault = {
      source  = "hashicorp/vault"
      version = "~> 4.0"
    }
  }
  
  # 后端配置
  backend "local" {
    path = "terraform.tfstate"
  }
}

# Consul Provider配置
provider "consul" {
  address    = "100.116.158.95:8500"
  scheme     = "http"
  datacenter = "dc1"
}

# Vault Provider配置
provider "vault" {
  address = var.vault_config.address
  token   = var.vault_token
}

# 从Consul获取Oracle Cloud配置
data "consul_keys" "oracle_config" {
  key {
    name = "tenancy_ocid"
    path = "config/staging/oracle/kr/tenancy_ocid"
  }
  key {
    name = "user_ocid"
    path = "config/staging/oracle/kr/user_ocid"
  }
  key {
    name = "fingerprint"
    path = "config/staging/oracle/kr/fingerprint"
  }
  key {
    name = "private_key"
    path = "config/staging/oracle/kr/private_key"
  }
}

# 从Consul获取Oracle Cloud美国区域配置
data "consul_keys" "oracle_config_us" {
  key {
    name = "tenancy_ocid"
    path = "config/staging/oracle/us/tenancy_ocid"
  }
  key {
    name = "user_ocid"
    path = "config/staging/oracle/us/user_ocid"
  }
  key {
    name = "fingerprint"
    path = "config/staging/oracle/us/fingerprint"
  }
  key {
    name = "private_key"
    path = "config/staging/oracle/us/private_key"
  }
}

# 使用从Consul获取的配置的OCI Provider
provider "oci" {
  tenancy_ocid     = data.consul_keys.oracle_config.var.tenancy_ocid
  user_ocid        = data.consul_keys.oracle_config.var.user_ocid
  fingerprint      = data.consul_keys.oracle_config.var.fingerprint
  private_key      = data.consul_keys.oracle_config.var.private_key
  region           = "ap-chuncheon-1"
}

# 美国区域的OCI Provider
provider "oci" {
  alias           = "us"
  tenancy_ocid    = data.consul_keys.oracle_config_us.var.tenancy_ocid
  user_ocid       = data.consul_keys.oracle_config_us.var.user_ocid
  fingerprint     = data.consul_keys.oracle_config_us.var.fingerprint
  private_key     = data.consul_keys.oracle_config_us.var.private_key
  region          = "us-ashburn-1"
}

# Oracle Cloud 基础设施
module "oracle_cloud" {
  source = "../../providers/oracle-cloud"
  
  # 传递变量
  environment    = var.environment
  project_name   = var.project_name
  owner          = var.owner
  vpc_cidr       = var.vpc_cidr
  availability_zones = var.availability_zones
  common_tags    = var.common_tags
  
  # 使用从Consul获取的配置
  oci_config = {
    tenancy_ocid     = data.consul_keys.oracle_config.var.tenancy_ocid
    user_ocid        = data.consul_keys.oracle_config.var.user_ocid
    fingerprint      = data.consul_keys.oracle_config.var.fingerprint
    private_key      = data.consul_keys.oracle_config.var.private_key
    region           = "ap-chuncheon-1"
  }
  
  # Staging环境特定配置
  instance_count = 2
  instance_size  = "VM.Standard.E2.1.Micro"
  
  providers = {
    oci = oci
  }
}

# 输出
output "oracle_cloud_outputs" {
  description = "Oracle Cloud 基础设施输出"
  value       = module.oracle_cloud
}