# ------------------------
# | ElastiCache (Redis)  |
# ------------------------

resource "aws_elasticache_subnet_group" "elasticache" {
  name        = "elasticache-subnet-group"
  description = "Use the private subnet for ElastiCache instances."
  subnet_ids  = [var.private_subnet_id, var.private2_subnet_id]
}

resource "aws_elasticache_parameter_group" "magento_required" {
  name   = "magento-required"
  family = "redis6.x"

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

# Redis instance for backend caching
resource "aws_elasticache_replication_group" "redis-backend-cache" {
  automatic_failover_enabled    = true
  availability_zones            = [var.az1, var.az2]
  multi_az_enabled              = true
  engine                        = "redis"
  engine_version                = var.redis_engine_version
  replication_group_id          = "redis-backend-cache"
  replication_group_description = "Redis Replication Group"
  node_type                     = var.ec2_instance_type_redis_cache
  number_cache_clusters         = 2
  parameter_group_name          = aws_elasticache_parameter_group.magento_required.name
  subnet_group_name             = aws_elasticache_subnet_group.elasticache.name
  security_group_ids            = [aws_security_group.allow_redis_in.id]
  port                          = 6379
  at_rest_encryption_enabled    = true

  lifecycle {
    ignore_changes = [number_cache_clusters]
  }

  tags = {
    Name      = "magento-redis-backend-cache"
    Terraform = true
  }
}

# Redis instance for sessions
resource "aws_elasticache_replication_group" "redis-sessions" {
  automatic_failover_enabled    = true
  availability_zones            = [var.az1, var.az2]
  multi_az_enabled              = true
  engine                        = "redis"
  engine_version                = var.redis_engine_version
  replication_group_id          = "redis-sessions"
  replication_group_description = "Redis Replication Group"
  node_type                     = var.ec2_instance_type_redis_session
  number_cache_clusters         = 2
  parameter_group_name          = aws_elasticache_parameter_group.magento_required.name
  subnet_group_name             = aws_elasticache_subnet_group.elasticache.name
  security_group_ids            = [aws_security_group.allow_redis_in.id]
  port                          = 6379
  at_rest_encryption_enabled    = true

  lifecycle {
    ignore_changes = [number_cache_clusters]
  }

  tags = {
    Name      = "magento-redis-sessions"
    Terraform = true
  }
}