module "seed" {
  source = "./seed"

  env                                   = var.env
  customer_id                           = var.customer_id
  cloud_region                          = var.cloud_region
  logical_region_name                   = local.logical_region_name
  cluster_name                          = local.cluster_name
  rcp_resource_group                    = local.rcp_resource_group
  rcp_vnet_cidr                         = local.rcp_vnet_cidr
  o11y_vpc_cidr                         = module.shoot.vnet_cidr
  rcp_pe_subnet_cidr                    = local.rcp_pe_subnet_cidr
  apiserver_zone_name                   = local.apiserver_zone_name
  gateway_zone_name                     = local.gateway_zone_name
  controlplane_domain_name              = local.controlplane_domain
  issuer_dns_zone                       = local.issuer_dns_zone
  issuer_hosted_zone_resource_group     = local.issuer_hosted_zone_resource_group
  public_hosted_zone_domain             = local.public_hosted_zone
  hosted_zone_resource_group            = local.hosted_zone_resource_group
  regional_api_host_record              = local.regional_api_host
  service_address                       = local.service_address
  image_registry                        = local.image_registry
  acr_id_scope                          = local.effective_acr_id_scope
  control_plane_admin_group_object_ids  = local.control_plane_admin_group_object_ids
  pingcap_tenant_id                     = local.controlplane_tenant_id
  pingcap_subscription_id               = local.controlplane_subscription
  controlplane_client_id                = local.controlplane_client_id
  base_account                          = local.base_account
  multi_tenant_app_client_id            = var.onboarding.multi_tenant_app_client_id
  customer_tenant_id                    = var.onboarding.customer_tenant_id
  customer_subscription_id              = var.onboarding.customer_subscription_id
  aks_control_plane_identity_name       = var.onboarding.aks_control_plane_identity_name
  aks_kubelet_identity_name             = var.onboarding.aks_kubelet_identity_name
  aks_managed_identity_resource_group   = var.onboarding.aks_managed_identity_resource_group
  dataplane_admin_group_object_ids      = var.onboarding.dataplane_admin_group_object_ids
  customer_acr_resource_id              = var.onboarding.customer_acr_resource_id
  customer_acr_login_server             = var.onboarding.customer_acr_login_server
  tidb_cluster_dns_domain               = var.onboarding.tidb_cluster_dns_domain
  tidb_cluster_dns_resource_group       = var.onboarding.tidb_cluster_dns_resource_group
  audit_log_storage_account_name        = var.onboarding.audit_log_storage_account_name
  audit_log_bucket                      = var.onboarding.audit_log_bucket
  customer_acr_resource_group           = local.customer_acr_resource_group
  storage_accounts_resource_group       = var.onboarding.storage_accounts_resource_group
  dataplane_accounts_contract_shape     = local.dataplane_accounts_contract_shape
  global_controlplane_ips               = local.global_controlplane_ips
  clinic_ips                            = local.clinic_ips
  bastion_ips                           = local.bastion_ips
  auth0_audience                        = local.auth0_audience
  auth0_domain                          = local.auth0_domain
  availability_zones                    = var.availability_zones
  authorized_ip_ranges                  = var.authorized_ip_ranges
  api_server_vnet_integration_enabled   = var.api_server_vnet_integration_enabled
  nodepool_size                         = var.nodepool_size
  nodepool_autoscaling_enabled          = var.nodepool_autoscaling_enabled
  nodepool_min_size                     = var.nodepool_min_size
  nodepool_max_size                     = var.nodepool_max_size
  vm_size                               = var.vm_size
  k8s_version                           = var.k8s_version
  jump_server_tenant_id                 = local.jump_server_tenant_id
  jump_server_subscription              = local.jump_server_subscription
  jump_server_env                       = local.jump_server_env
  jump_server_token_file_path           = var.jump_server_token_file_path
  region_resource_group_name            = local.region_outputs.resource_group_name.value
  region_mysql_server_name              = local.region_outputs.server_name.value
  region_key_vault_name                 = local.region_outputs.key_vault_name.value
  region_key_vault_id                   = local.region_outputs.key_vault_id.value
  region_key_vault_uri                  = local.region_outputs.key_vault_uri.value
  region_admin_password_secret_name     = local.region_outputs.admin_password_secret_name.value
  region_metering_storage_account_id    = local.region_outputs.metering_storage_account_id.value
  region_metering_storage_account_name  = local.region_outputs.metering_storage_account_name.value
  region_metering_primary_blob_endpoint = local.region_outputs.metering_primary_blob_endpoint.value
  destroy_mode                          = var.destroy_mode
}

module "shoot" {
  source = "./shoot"

  env                 = var.env
  tags                = var.shoot_tags
  customer_id         = var.customer_id
  cloud_region        = var.cloud_region
  logical_region_name = local.logical_region_name
  cluster_name        = local.o11y_cluster_name
  resource_group_name = local.o11y_aks_resource_group

  customer_tenant_id                         = var.onboarding.customer_tenant_id
  customer_subscription_id                   = var.onboarding.customer_subscription_id
  o11y_deployment_multi_tenant_app_client_id = var.onboarding.o11y_deployment_multi_tenant_app_client_id
  customer_acr_resource_id                   = var.onboarding.customer_acr_resource_id
  customer_acr_login_server                  = var.onboarding.customer_acr_login_server
  storage_resource_group_name                = local.o11y_storage_resource_group

  controlplane_aws_account = local.base_account
  o11y_global_account      = local.o11y_outputs.account.value
  o11y_sns_topic_arn       = local.o11y_outputs.sns_topic_arn.value

  dns_zone_name                = local.o11y_dns_zone_name
  dns_zone_resource_group_name = local.o11y_dns_zone_resource_group_name
  image_registry               = local.o11y_image_registry
  byoc_tenant_id               = local.o11y_byoc_tenant_id

  api_server_vnet_integration_enabled = var.api_server_vnet_integration_enabled

  o11y_identity_resource_group         = var.onboarding.o11y_identity_resource_group
  o11y_aks_control_plane_identity_name = var.onboarding.o11y_aks_control_plane_identity_name
  o11y_aks_kubelet_identity_name       = var.onboarding.o11y_aks_kubelet_identity_name
  o11y_regional_server_identity_name   = var.onboarding.o11y_regional_server_identity_name
  o11y_vmbackup_identity_name          = var.onboarding.o11y_vmbackup_identity_name
  o11y_loki_identity_name              = var.onboarding.o11y_loki_identity_name
  o11y_velero_identity_name            = var.onboarding.o11y_velero_identity_name
  o11y_agic_identity_name              = var.onboarding.o11y_agic_identity_name

  providers = {
    azurerm         = azurerm.customer_o11y_deployment
    aws             = aws.o11y_global
    aws.tf_state    = aws.tf_state
    aws.o11y_global = aws.o11y_global
  }
}
