data "alicloud_db_zones" "this" {
  engine                   = "MySQL"
  engine_version           = "8.0"
  instance_charge_type     = "PostPaid"
  category                 = "Basic"
  db_instance_storage_type = "cloud_essd"
}

data "alicloud_db_instance_classes" "this" {
  zone_id                  = data.alicloud_db_zones.this.zones.0.id
  engine                   = "MySQL"
  engine_version           = "8.0"
  category                 = "Basic"
  db_instance_storage_type = "cloud_essd"
  instance_charge_type     = "PostPaid"
}

locals {
  # Filter out MyDuck Server instance types — they are a separate product that
  # requires an explicit subscription and cannot be created as standard RDS MySQL.
  rds_instance_classes = [
    for ic in data.alicloud_db_instance_classes.this.instance_classes :
    ic if !startswith(ic.instance_class, "myduck")
  ]
}

resource "alicloud_db_instance" "this" {
  instance_name            = "${var.env}-${var.region}-rds"
  engine                   = "MySQL"
  engine_version           = "8.0"
  instance_type            = local.rds_instance_classes[0].instance_class
  instance_storage         = local.rds_instance_classes[0].storage_range.min
  instance_charge_type     = "Postpaid"
  vswitch_id               = alicloud_vswitch.this.id
  monitoring_period        = "60"
  db_instance_storage_type = "cloud_essd"
  security_group_ids       = [alicloud_security_group.this.id]

  tags = {
    environment = var.env
    usedby      = "dbaas-control-plane-seed"
    servicetype = "nextgen"
    tenant      = "admin"
  }

  lifecycle {
    ignore_changes = [template_id_list]
  }
}

resource "alicloud_db_connection" "this" {
  instance_id = alicloud_db_instance.this.id
}

output "rds_public_connection_string" {
  value = alicloud_db_connection.this.connection_string
}

output "rds_port" {
  value = alicloud_db_connection.this.port
}

output "rds_instance_id" {
  value = alicloud_db_instance.this.id
}
