module "shared" {
  source = "./modules/shared"

  count = local.stage == "production" ? 1 : 0

  aws_vpc_id  = local.aws_vpc_id
  aws_subnets = local.aws_subnets

  base_domain = local.base_domain

  main_db_parameter_group_name    = local.main_db_parameter_group_name
  main_cache_replication_group_id = local.main_cache_replication_group_id
  appconfig_application_name      = local.appconfig_application_name
  lb_backend_name                 = local.lb_backend_name
  lb_backend_security_group_name  = local.lb_backend_security_group_name
}

module "s3" {
  source = "./modules/s3"

  stage = local.stage
}

module "rds" {
  source = "./modules/rds"

  stage = local.stage

  aws_region  = var.aws_region
  aws_subnets = local.aws_subnets
  aws_vpc_id  = local.aws_vpc_id

  instance_class                        = var.main_db_instance_class
  parameter_group_name                  = local.main_db_parameter_group_name
  performance_insights_enabled          = var.main_db_performance_insights_enabled
  performance_insights_retention_period = var.main_db_performance_insights_retention_period
  backup_retention_period               = var.main_db_backup_retention_period

  postgres_username = var.postgres_username
  postgres_password = var.postgres_password
  postgres_database = var.postgres_database

  snapshot = var.main_db_snapshot
}

module "ecr" {
  source = "./modules/ecr"

  stage = local.stage
}

module "load_balancer" {
  source = "./modules/load_balancer"

  stage = local.stage

  aws_vpc_id = local.aws_vpc_id

  base_domain     = local.base_domain
  domain          = var.domain
  lb_backend_name = local.lb_backend_name
}

module "ecs" {
  source = "./modules/ecs"

  stage = local.stage

  aws_region         = var.aws_region
  aws_vpc_id         = local.aws_vpc_id
  aws_subnets        = local.aws_subnets
  aws_access_key     = var.aws_access_key
  aws_secret_key     = var.aws_secret_key
  execution_role_arn = var.ecs_execution_role_arn

  datadog_api_key = var.datadog_api_key
  datadog_site    = var.datadog_site

  repository_url     = module.ecr.repository_url
  public_bucket_name = module.s3.public_bucket_name

  db_address        = module.rds.main_db_address
  db_port           = module.rds.main_db_port
  postgres_username = var.postgres_username
  postgres_password = var.postgres_password
  postgres_database = var.postgres_database

  main_cache_replication_group_id = local.main_cache_replication_group_id
  redis_db                        = var.redis_db

  http_target_group_arn          = module.load_balancer.http_target_group_arn
  ws_target_group_arn            = module.load_balancer.ws_target_group_arn
  lb_backend_security_group_name = local.lb_backend_security_group_name

  stripe     = var.stripe
  from_email = var.from_email
  domain     = var.domain
  firebase   = var.firebase
  google     = var.google

  reviews_cron_schedule            = var.reviews_cron_schedule
  reservation_seeder_cron_schedule = var.reservation_seeder_cron_schedule
}

module "appconfig" {
  source = "./modules/appconfig"

  stage = local.stage

  appconfig_application_name = local.appconfig_application_name
}
