resource "aws_db_subnet_group" "default" {
  name       = "${var.environment}-${var.aws_stack_name}"
  subnet_ids = var.vpc_private_subnet_ids

  lifecycle {
    create_before_destroy = true
  }

  tags = {
    Terraformed = "true"
  }
}

resource "aws_security_group_rule" "ec2_to_rds" {
  type                     = "ingress"
  from_port                = 3306
  to_port                  = 3306
  protocol                 = "TCP"
  source_security_group_id = var.aws_security_group_id
  security_group_id        = var.aws_security_group_id
}

resource "aws_db_parameter_group" "default" {
  name   = "${var.db_name}-group"
  family = "mysql${var.db_engine_version}"
  parameter {
    name  = "max_allowed_packet"
    value = "52428800"
  }
  tags = {
    Terraformed = "true"
  }
}

resource "aws_db_instance" "mysql_db" {
  allocated_storage         = var.db_storage
  storage_type              = var.db_storage_type
  engine                    = "mysql"
  engine_version            = var.db_engine_version
  instance_class            = var.db_instance_class
  identifier_prefix         = "${var.environment}-${var.aws_stack_name}"
  name                      = var.db_name
  username                  = var.db_username
  password                  = var.db_password
  backup_retention_period   = var.db_backup_retention_period
  backup_window             = "09:46-11:16"
  multi_az                  = "true"
  apply_immediately         = "true"
  final_snapshot_identifier = "${var.environment}-${var.aws_stack_name}"
  vpc_security_group_ids    = [var.aws_security_group_id]
  db_subnet_group_name      = aws_db_subnet_group.default.name
  parameter_group_name      = aws_db_parameter_group.default.name
  tags = {
    Terraformed = "true"
  }
}

output "rds_endpoint" {
  value = aws_db_instance.mysql_db.endpoint
}

