# Variables for Multi-Cloud Deployment

variable "environment" {
  description = "Environment name (prod, dev, test, staging)"
  type        = string
  default     = "prod"
  validation {
    condition     = contains(["prod", "dev", "test", "staging"], var.environment)
    error_message = "Environment must be one of: prod, dev, test, staging"
  }
}

variable "deployment_strategy" {
  description = "Deployment strategy (blue-green, canary, rolling)"
  type        = string
  default     = "blue-green"
  validation {
    condition     = contains(["blue-green", "canary", "rolling"], var.deployment_strategy)
    error_message = "Deployment strategy must be one of: blue-green, canary, rolling"
  }
}

variable "enable_azure_arc" {
  description = "Enable Azure Arc for hybrid management"
  type        = bool
  default     = true
}

variable "enable_service_mesh" {
  description = "Enable service mesh for cross-cloud communication"
  type        = bool
  default     = true
}

variable "service_mesh_provider" {
  description = "Service mesh provider (istio, linkerd, kuma)"
  type        = string
  default     = "istio"
  validation {
    condition     = contains(["istio", "linkerd", "kuma"], var.service_mesh_provider)
    error_message = "Service mesh provider must be one of: istio, linkerd, kuma"
  }
}

variable "secrets_provider" {
  description = "Primary secrets management provider"
  type        = string
  default     = "vault"
  validation {
    condition     = contains(["vault", "azure-keyvault", "aws-secrets-manager", "gcp-secret-manager"], var.secrets_provider)
    error_message = "Secrets provider must be one of: vault, azure-keyvault, aws-secrets-manager, gcp-secret-manager"
  }
}

variable "vault_address" {
  description = "HashiCorp Vault address (if using Vault)"
  type        = string
  default     = ""
}

variable "vault_token" {
  description = "HashiCorp Vault token (if using Vault)"
  type        = string
  default     = ""
  sensitive   = true
}

# Azure-specific variables
variable "azure_subscription_id" {
  description = "Azure subscription ID"
  type        = string
  default     = ""
}

variable "azure_tenant_id" {
  description = "Azure tenant ID"
  type        = string
  default     = ""
}

# AWS-specific variables
variable "aws_access_key_id" {
  description = "AWS access key ID"
  type        = string
  default     = ""
  sensitive   = true
}

variable "aws_secret_access_key" {
  description = "AWS secret access key"
  type        = string
  default     = ""
  sensitive   = true
}

variable "aws_default_region" {
  description = "AWS default region"
  type        = string
  default     = "us-west-2"
}

# GCP-specific variables
variable "gcp_project_id" {
  description = "GCP project ID"
  type        = string
  default     = ""
}

variable "gcp_default_region" {
  description = "GCP default region"
  type        = string
  default     = "europe-west1"
}

# IBM Cloud-specific variables
variable "ibm_api_key" {
  description = "IBM Cloud API key"
  type        = string
  default     = ""
  sensitive   = true
}

variable "ibm_default_region" {
  description = "IBM Cloud default region"
  type        = string
  default     = "us-south"
}

# Oracle Cloud-specific variables
variable "oci_tenancy_ocid" {
  description = "OCI tenancy OCID"
  type        = string
  default     = ""
}

variable "oci_user_ocid" {
  description = "OCI user OCID"
  type        = string
  default     = ""
}

variable "oci_fingerprint" {
  description = "OCI API key fingerprint"
  type        = string
  default     = ""
}

variable "oci_private_key_path" {
  description = "Path to OCI private key"
  type        = string
  default     = ""
}

variable "oci_default_region" {
  description = "OCI default region"
  type        = string
  default     = "us-ashburn-1"
}

# vSphere/On-prem variables
variable "vsphere_user" {
  description = "vSphere username"
  type        = string
  default     = ""
}

variable "vsphere_password" {
  description = "vSphere password"
  type        = string
  default     = ""
  sensitive   = true
}

variable "vsphere_server" {
  description = "vSphere server address"
  type        = string
  default     = ""
}

variable "tags" {
  description = "Common tags to apply to all resources"
  type        = map(string)
  default = {
    Environment = "production"
    Project     = "DeFi Oracle Meta Mainnet"
    ChainID     = "138"
    ManagedBy   = "Terraform"
    CostCenter  = "Blockchain"
    Owner       = "DevOps Team"
  }
}

