# DB subnet group ============================================================

resource "aws_db_subnet_group" "this" {
  name       = "${var.identifier}-subnet-group"
  subnet_ids = var.subnet_ids

  tags = local.tags
}

# DB parameter group =========================================================

resource "aws_db_parameter_group" "this" {
  name   = "${var.identifier}-params"
  family = local.parameter_group_family

  dynamic "parameter" {
    for_each = var.parameters
    content {
      name  = parameter.key
      value = parameter.value
    }
  }

  lifecycle {
    create_before_destroy = true
  }

  tags = local.tags
}

# RDS Oracle instance ========================================================

resource "aws_db_instance" "this" {
  identifier         = var.identifier
  engine             = var.engine
  engine_version     = var.engine_version
  license_model      = var.license_model
  instance_class     = var.instance_class
  character_set_name = var.character_set_name

  allocated_storage     = var.allocated_storage
  max_allocated_storage = var.max_allocated_storage
  storage_type          = "gp3"
  storage_encrypted     = true
  kms_key_id            = var.kms_key_id

  username                    = var.username
  manage_master_user_password = var.manage_master_user_password

  db_subnet_group_name   = aws_db_subnet_group.this.name
  vpc_security_group_ids = var.security_group_ids
  parameter_group_name   = aws_db_parameter_group.this.name
  option_group_name      = var.option_group_name
  multi_az               = var.multi_az

  backup_retention_period   = var.backup_retention_period
  backup_window             = "03:00-04:00"
  maintenance_window        = "sun:05:00-sun:06:00"
  deletion_protection       = var.deletion_protection
  skip_final_snapshot       = var.skip_final_snapshot
  final_snapshot_identifier = var.skip_final_snapshot ? null : "${var.identifier}-final"

  monitoring_interval          = var.monitoring_interval
  performance_insights_enabled = true
  auto_minor_version_upgrade   = false
  copy_tags_to_snapshot        = true

  tags = local.tags
}
