resource "aws_elasticache_subnet_group" "default" {
  name        = "subnet-group-redis-${local.workspace["service_name"]}"
  description = "Private subnets for the ElastiCache instances that support ${local.workspace["service_name"]}"
  subnet_ids  = data.terraform_remote_state.mop_core.outputs.vpc_subnet_private_ids
}

resource "aws_elasticache_replication_group" "default" {
  replication_group_id          = local.workspace["service_name"]
  replication_group_description = "Redis rep grp for ${local.workspace["service_name"]}"

  node_type            = local.workspace["redis_instance_type"]
  port                 = 6379
  parameter_group_name = aws_elasticache_parameter_group.default.name
  engine_version       = local.workspace["redis_version"]

  snapshot_retention_limit = 5
  snapshot_window          = "00:00-05:00"
  maintenance_window       = "sat:22:00-sat:23:00"

  subnet_group_name          = aws_elasticache_subnet_group.default.name
  number_cache_clusters      = local.workspace["redis_nodes"]
  multi_az_enabled           = local.workspace["redis_nodes"] > 1 ? true : false
  automatic_failover_enabled = local.workspace["redis_nodes"] > 1 ? true : false
  security_group_ids         = [data.terraform_remote_state.mop_core.outputs.sg_redis_id]

  tags = {
    nf_node_type      = "MOP"
    nf_environment    = local.workspace["deploy_env_name"]
    cost_environment  = local.workspace["deploy_env_name"] == "production" ? "production" : "non-production"
    cost_category     = "MOPINT"
    cost_team_owner   = "MOPRAV"
  }
}

resource "aws_elasticache_parameter_group" "default" {
  name   = "${local.workspace["service_name"]}-pg"
  family = "redis${local.workspace["redis_version"]}"

  parameter {
    name  = "maxmemory-policy"
    value = "allkeys-lru"
  }
}
