resource "aws_rds_cluster_parameter_group" "s3_aurora" {
  name        = "${local.name_prefix}-s3-aurora"
  family      = "aurora5.6"
  description = "RDS default cluster parameter group"

  parameter {
    name  = "aurora_select_into_s3_role"
    value = module.rds_s3_role.role.arn
  }
  parameter {
    name  = "aurora_load_from_s3_role"
    value = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "immediate"
    name         = "log_output"
    value        = "file"
  }
  parameter {
    apply_method = "immediate"
    name         = "long_query_time"
    value        = "15"
  }
  parameter {
    apply_method = "immediate"
    name         = "slow_query_log"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "group_concat_max_len"
    value        = "2048" // default: 1024
  }
  parameter {
    apply_method = "immediate"
    name         = "binlog_format"
    value        = "ROW"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }
  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }

  lifecycle {
    ignore_changes = [parameter]
  }
}

resource "aws_rds_cluster_parameter_group" "s3_aurora_57" {
  name        = "${local.name_prefix}-s3-aurora-5-7"
  family      = "aurora-mysql5.7"
  description = "RDS default cluster parameter group"

  parameter {
    apply_method = "pending-reboot"
    name         = "aurora_select_into_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "aurora_load_from_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "aws_default_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "immediate"
    name         = "long_query_time"
    value        = "15"
  }
  parameter {
    apply_method = "immediate"
    name         = "slow_query_log"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "group_concat_max_len"
    value        = "2048" // default: 1024
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "binlog_format"
    value        = "ROW"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }
  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }

  parameter {
    apply_method = "immediate"
    name         = "max_execution_time" //only applies to SELECT
    value        = 1200000              // 1200 sec, the value is in milliseconds
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_lock_wait_timeout"
    value        = 150 // the default value is 50, trying x3
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_rollback_on_timeout"
    value        = 1 // the default value is 0
  }


  #  lifecycle {
  #    ignore_changes = [parameter]
  #  }
}

resource "aws_rds_cluster_parameter_group" "s3_aurora_8" {
  name        = "${local.name_prefix}-s3-aurora-8"
  family      = "aurora-mysql8.0"
  description = "RDS default cluster parameter group"
  
  parameter {
    apply_method = "pending-reboot"
    name         = "aws_default_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "immediate"
    name         = "long_query_time"
    value        = "15"
  }
  parameter {
    apply_method = "immediate"
    name         = "slow_query_log"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "group_concat_max_len"
    value        = "2048" // default: 1024
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "binlog_format"
    value        = "ROW"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }
  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }

  parameter {
    apply_method = "immediate"
    name         = "max_execution_time" //only applies to SELECT
    value        = 1200000              // 1200 sec, the value is in milliseconds
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_lock_wait_timeout"
    value        = 150 // the default value is 50, trying x3
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_rollback_on_timeout"
    value        = 1 // the default value is 0
  }


  #  lifecycle {
  #    ignore_changes = [parameter]
  #  }
}

resource "aws_docdb_subnet_group" "main" {
  name       = "dev-apollo"
  subnet_ids = module.main_public_subnets.subnet_ids

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Networking",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_NTW"
    }
  )
}


resource "aws_db_subnet_group" "dbsubnetgroup" {
  name       = "${local.name_prefix}-dbsubnetgroup"
  subnet_ids = module.main_public_subnets.subnet_ids

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Networking",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_NTW"
    }
  )
}

resource "aws_db_subnet_group" "private_dbsubnetgroup" {
  name       = "${local.name_prefix}-private_dbsubnetgroup"
  subnet_ids = module.main_private_subnets.subnet_ids

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Networking",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_NTW"
    }
  )
}

/*
module "aurora_mysql" {
  source                          = "../../../modules/rds/aurora"
  name_prefix                     = local.name_prefix
  common_tags                     = local.common_tags
  vpc_id                          = module.main_vpc.vpc_id
  subnets                         = module.main_public_subnets.subnet_ids
  security_groups                 = [module.main_sg_map.aurora_id, module.main_sg_map.msqldb_debug_id]
  instance_type                   = "db.r5.xlarge"
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.s3_aurora.id
  #db_parameter_group_name         = "dev-aurora-connection-limit"
  publicly_accessible             = true
  apply_immediately               = true
  username                        = "sony"
  snapshot_identifier             = "arn:aws:rds:us-east-1:475275892927:cluster-snapshot:sonydb-aurora-cluster-2019-04-24-22-06-inital-dev"
  performance_insights_enabled    = true
  iam_roles                       = [module.rds_s3_role.role.arn]
}
*/

resource "aws_secretsmanager_secret" "user_data_db_database_reader" {
  name       = "${local.secrets_name_prefix}/dbSony_dbo/mysql/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"
    }
  )
}
