resource "aws_rds_cluster_parameter_group" "db_parameter_group" {
  name        = "${var.service_name}-cluster-parameter-group"
  description = "${var.service_name}-cluster-parameter-group"
  family      = "aurora-mysql5.7"

  parameter {
    name         = "aurora_select_into_s3_role"
    value        = aws_iam_role.rds_role.arn
    apply_method = "immediate"
  }

  parameter {
    name         = "binlog_format"
    value        = "MIXED"
    apply_method = "pending-reboot"
  }

  parameter {
    name         = "character_set_client"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_connection"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_database"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_filesystem"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_results"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_server"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "collation_connection"
    value        = "utf8mb4_general_ci"
    apply_method = "immediate"
  }

  parameter {
    name         = "collation_server"
    value        = "utf8mb4_general_ci"
    apply_method = "immediate"
  }

  parameter {
    name         = "log_bin_trust_function_creators"
    value        = "1"
    apply_method = "immediate"
  }

  parameter {
    name         = "slave_type_conversions"
    value        = "ALL_NON_LOSSY"
    apply_method = "pending-reboot"
  }
}

resource "aws_rds_cluster_parameter_group" "db_parameter_group_mysql8" {
  name        = "${var.service_name}-mysql8-cluster-parameter-group"
  description = "${var.service_name}-mysql8-cluster-parameter-group"
  family      = "aurora-mysql8.0"

  parameter {
    name         = "aws_default_s3_role"
    value        = aws_iam_role.rds_role.arn
    apply_method = "immediate"
  }

  parameter {
    name         = "activate_all_roles_on_login"
    value        = "1"
    apply_method = "immediate"
  }

  parameter {
    name         = "binlog_format"
    value        = "ROW"
    apply_method = "pending-reboot"
  }

  parameter {
    name         = "character_set_client"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_connection"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_database"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_filesystem"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_results"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "character_set_server"
    value        = "utf8mb4"
    apply_method = "immediate"
  }

  parameter {
    name         = "collation_connection"
    value        = "utf8mb4_general_ci"
    apply_method = "immediate"
  }

  parameter {
    name         = "collation_server"
    value        = "utf8mb4_general_ci"
    apply_method = "immediate"
  }

  parameter {
    name         = "log_bin_trust_function_creators"
    value        = "1"
    apply_method = "immediate"
  }

  parameter {
    name         = "replica_type_conversions"
    value        = "ALL_NON_LOSSY"
    apply_method = "pending-reboot"
  }
  parameter {
    name         = "time_zone"
    value        = "US/Eastern"
    apply_method = "immediate"
  }
  parameter {
    name         = "max_heap_table_size"
    value        = "4294967296"
    apply_method = "immediate"
  }
  parameter {
    name         = "tmp_table_size"
    value        = "4294967296"
    apply_method = "immediate"
  }

  parameter {
    name         = "server_audit_logging"
    value        = "1"
    apply_method = "immediate"
  }

  parameter {
    name         = "server_audit_events"
    value        = "QUERY_DCL,QUERY_DDL"
    apply_method = "immediate"
  }

  parameter {
    name         = "server_audit_excl_users"
    value        = "rdsadmin,rdsproxyadmin"
    apply_method = "immediate"
  }
}

resource "aws_db_parameter_group" "db_parameter_group" {
  family      = "aurora-mysql5.7"
  name        = "${var.service_name}-parameter-group"
  description = "${var.service_name}-parameter-group"

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

  parameter {
    name         = "max_allowed_packet"
    value        = "67108864"
    apply_method = "immediate"
  }
}

resource "aws_db_parameter_group" "db_parameter_group_mysql8" {
  family      = "aurora-mysql8.0"
  name        = "${var.service_name}-mysql8-parameter-group"
  description = "${var.service_name}-mysql8-parameter-group"

  # This system variable determines whether the server enables certain
  # nonstandard behaviors for default values and NULL-value handling in TIMESTAMP columns.
  parameter {
    name         = "explicit_defaults_for_timestamp"
    value        = "0" # default is 1
    apply_method = "pending-reboot"
  }

  parameter {
    name         = "max_allowed_packet"
    value        = "67108864" # this is actually the default value
    apply_method = "immediate"
  }
}
