# Parameter group for RDS instances (instance-level settings)
resource "aws_db_parameter_group" "db_parameter_group" {
  name   = "${var.environment}-${var.service_name}-db-parameter-group"
  family = "aurora-postgresql17"
}

# Cluster-level parameters for replication and SSL enforcement
resource "aws_rds_cluster_parameter_group" "rds_cluster_parameter_group" {
  name   = "${var.environment}-${var.service_name}-rds-cluster-parameter-group"
  family = "aurora-postgresql17"

  parameter {
    name         = "wal_sender_timeout"
    value        = "0"
    apply_method = "pending-reboot"
  }

  parameter {
    name         = "rds.logical_replication"
    value        = "1"
    apply_method = "pending-reboot"
  }

  parameter {
    name         = "rds.force_ssl"
    value        = "1"
    apply_method = "immediate"
  }
}

module "songwhip_presaves_rds" {
  source = "git@github.com:theorchard/terraform-rds.git//?ref=7.0.1"

  providers = {
    aws.dns = aws.networking
  }

  application_family = var.application_family
  environment        = var.environment
  service_name       = var.service_name

  vpc_id            = module.vpc_info.vpc_id
  rds_db_subnet_ids = module.vpc_info.default_private_subnet_ids

  rds_cluster_instance_class                = "db.t4g.medium"
  rds_cluster_instance_count                = 2
  rds_cluster_instance_parameter_group_name = aws_db_parameter_group.db_parameter_group.name
  rds_engine                                = "aurora-postgresql"
  rds_engine_version                        = "17.7"
  rds_master_username                       = "songwhip_presaves_admin"
  rds_master_password                       = "s0mePass!chang3me"
  rds_ingress_cidr_blocks                   = var.rds_ingress_cidr_blocks
  rds_db_cluster_parameter_group_name       = aws_rds_cluster_parameter_group.rds_cluster_parameter_group.name
  route53_record_creation_enabled           = false
  enabled_cloudwatch_logs_exports           = ["postgresql"]
  custom_kms_key_enabled                    = false
}

module "songwhip_presaves_rds_secrets" {
  source = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.1"

  environment        = var.environment
  service_name       = var.service_name
  secret_name        = "PRESAVES_DB_ADMIN_PASSWORD"
  application_family = var.application_family
}

# Datadog dashboard for the RDS cluster
module "songwhip_presaves_rds_dashboard" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/rds?ref=6.18.1"

  application_family                = var.application_family
  environment                       = var.environment
  service_name                      = var.service_name
  teams                             = [var.team_name]
  notification_endpoints            = "@slack-songwhip-alerts-dev"
  escalation_notification_endpoints = "@slack-songwhip-devs"
}
