resource "random_password" "password" {
  length           = 16
  special          = true
  override_special = "!#$%&*-_=+[]{}<>:?"
}
/*
resource "aws_db_subnet_group" "main" {
  name       = "${local.name_prefix}-db-private-subnet-group"
  subnet_ids = module.main_private_subnets.subnet_ids
  tags       = local.common_tags
}
*/
resource "aws_db_parameter_group" "main" {
  name   = "${local.name_prefix}-parameter-group"
  family = "postgres13"

  # log all CREATE, ALTER, DROP queries
  parameter {
    name  = "log_statement"
    value = "ddl"
  }

  # log all ddl statements that run longer than 100 ms
  parameter {
    name  = "log_min_duration_statement"
    value = "100"
  }
}
/*
resource "aws_db_instance" "main" {
  storage_type                    = "gp2"
  instance_class                  = "db.t3.medium"
  identifier                      = "${local.name_prefix}-main-instance"
  final_snapshot_identifier       = "${local.name_prefix}-main-instance-final"
  apply_immediately               = true
  db_subnet_group_name            = aws_db_subnet_group.main.id
  parameter_group_name            = aws_db_parameter_group.main.name
  option_group_name               = ""
  vpc_security_group_ids          = [module.main_sg_map.rds_id, module.main_sg_map.db_debug_id]
  publicly_accessible             = false
  copy_tags_to_snapshot           = true
  engine                          = "postgres"
  db_name                         = "main_${local.env_prefix}"
  username                        = "main_admin"
  password                        = random_password.password.result
  engine_version                  = "13.5"
  allocated_storage               = 100
  max_allocated_storage           = 250
  deletion_protection             = true
  backup_retention_period         = 7
  auto_minor_version_upgrade      = true
  enabled_cloudwatch_logs_exports = ["postgresql"]
  storage_encrypted               = true
  kms_key_id                      = data.aws_kms_alias.default_rds.target_key_arn

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "RDS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_RDS"
    }
  )

  lifecycle {
    ignore_changes = [password, snapshot_identifier, engine_version]
  }
}

resource "aws_db_instance_role_association" "main_instance_import" {
  db_instance_identifier = aws_db_instance.main.id
  feature_name           = "s3Import"
  role_arn               = module.rds_s3_import_role.role.arn
}

resource "aws_secretsmanager_secret" "main_db_cluster_admin" {
  name       = "maintenance/root/${local.secrets_name_prefix}/main_admin"
  kms_key_id = module.kms_secrets_manager.maintenance_root_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "main_db_database_owner" {
  name       = "maintenance/common/${local.secrets_name_prefix}/main_owner"
  kms_key_id = module.kms_secrets_manager.maintenance_common_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "main_db_database_user" {
  name       = "${local.secrets_name_prefix}/main/pg/user"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "main_db_database_reader" {
  name       = "${local.secrets_name_prefix}/main/pg/reader"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "aggregates_db_cluster_admin" {
  name       = "maintenance/root/${local.secrets_name_prefix}/aggregates_admin"
  kms_key_id = module.kms_secrets_manager.maintenance_root_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "aggregates_db_database_owner" {
  name       = "maintenance/common/${local.secrets_name_prefix}/aggregates_owner"
  kms_key_id = module.kms_secrets_manager.maintenance_common_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "aggregates_db_database_user" {
  name       = "${local.secrets_name_prefix}/aggregates/pg/user"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "aggregates_db_database_reader" {
  name       = "${local.secrets_name_prefix}/aggregates/pg/reader"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "cms_db_cluster_admin" {
  name       = "maintenance/root/${local.secrets_name_prefix}/cms_admin"
  kms_key_id = module.kms_secrets_manager.maintenance_root_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "cms_db_database_owner" {
  name       = "maintenance/common/${local.secrets_name_prefix}/cms_owner"
  kms_key_id = module.kms_secrets_manager.maintenance_common_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "cms_db_database_user" {
  name       = "${local.secrets_name_prefix}/cms/pg/user"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "cms_db_database_reader" {
  name       = "${local.secrets_name_prefix}/cms/pg/reader"
  kms_key_id = module.kms_secrets_manager.general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}
*/
