#
# Bigscreen Postgres Database
#

provider "aws" {
  region = "us-west-2"
}

variable "network_name" {
}

variable "version_name" {
}

variable "db_instance_class" {
}

variable "db_allocated_storage" {
  type = number
}

variable "db_postgres_username" {
  type = string
}

variable "db_postgres_password" {
  type    = string
  default = "password"
}

locals {
  db_name        = "${var.network_name}${var.version_name}db"
  db_server_name = "${var.network_name}-${var.version_name}-db"
  db_identifier  = "${var.network_name}-${var.version_name}-db"
  network_name   = var.network_name
}

resource "aws_db_subnet_group" "default" {
  name       = "${var.network_name}-cloud-database-subnet-group"
  subnet_ids = ["subnet-08218e43", "subnet-9e79f4e7", "subnet-bc5736e6", "subnet-41185f69"]

  tags = {
    Name = "${var.network_name}-cloud-database-subnet-group"
  }
}

# Security group for the RDS instances
resource "aws_security_group" "cloud_database_security_group" {
  name        = "${local.db_server_name}_security_group"
  description = "${local.db_server_name} Internal"
  vpc_id      = "vpc-6284a71b"

  ingress {
    description = "Postgres port"
    from_port   = 5432
    to_port     = 5432
    protocol    = "tcp"
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }

  tags = {
    Name = "[${local.network_name}] ${local.db_server_name}_security_group"
  }
}

resource "aws_db_instance" "primary" {
  allocated_storage       = var.db_allocated_storage
  storage_type            = "gp2"
  engine                  = "postgres"
  storage_encrypted       = true
  engine_version          = "15.4"
  instance_class          = var.db_instance_class
  identifier              = local.db_identifier
  db_name                 = local.db_name
  username                = var.db_postgres_username
  password                = var.db_postgres_password
  skip_final_snapshot     = false
  db_subnet_group_name    = aws_db_subnet_group.default.name
  backup_retention_period = 7
  deletion_protection     = true
  vpc_security_group_ids  = [aws_security_group.cloud_database_security_group.id]
  tags = {
    Name = "${local.db_server_name}"
  }
}

resource "aws_db_instance" "replica1" {
  replicate_source_db = aws_db_instance.primary.identifier
  instance_class      = var.db_instance_class
  identifier          = "${local.db_identifier}-r1"
  #db_subnet_group_name  = aws_db_subnet_group.default.name
  skip_final_snapshot = true
  deletion_protection = true
}

resource "aws_db_instance" "replica2" {
  replicate_source_db = aws_db_instance.primary.identifier
  instance_class      = var.db_instance_class
  identifier          = "${local.db_identifier}-r2"
  #db_subnet_group_name  = aws_db_subnet_group.default.name
  skip_final_snapshot = true
  deletion_protection = true
}
