module "access-logs-bucket" {
  source          = "../../modules/aws-so-access-logs"
  name            = "${var.client_name}-${var.stage}-alb-access-logs"
  alb_logs_prefix = "alb"
}

module "vpc" {
  source                       = "terraform-aws-modules/vpc/aws"
  version                      = "~> 5.2.0"
  name                         = var.vpc_name
  cidr                         = var.cidr
  azs                          = var.azs
  public_subnets               = var.public_subnets
  private_subnets              = var.private_subnets
  database_subnets             = var.database_subnets
  enable_nat_gateway           = var.enable_nat_gateway
  single_nat_gateway           = var.single_nat_gateway
  enable_dns_hostnames         = var.enable_dns_hostname
  enable_dns_support           = var.enable_dns_support
  create_database_subnet_group = var.create_database_subnet_group

  public_subnet_names = [
    "${var.client_name}-${var.stage}-public-subnet-a",
    "${var.client_name}-${var.stage}-public-subnet-b",
  ]
  private_subnet_names = [
    "${var.client_name}-${var.stage}-supabase-private-subnet-a",
    "${var.client_name}-${var.stage}-supabase-private-subnet-b",
    "${var.client_name}-${var.stage}-waterwheel-private-subnet-a",
    "${var.client_name}-${var.stage}-waterwheel-private-subnet-b",
    "${var.client_name}-${var.stage}-qwen-private-subnet-a",
    "${var.client_name}-${var.stage}-qwen-private-subnet-b",
    "${var.client_name}-${var.stage}-lambda-private-subnet-a",
    "${var.client_name}-${var.stage}-lambda-private-subnet-b",
  ]
  database_subnet_names = [
    "${var.client_name}-${var.stage}-db-a",
    "${var.client_name}-${var.stage}-db-b",
  ]

  public_route_table_tags = {
    Name = "${var.client_name}-${var.stage}-public-route-table"
  }
  private_route_table_tags = {
    Name = "${var.client_name}-${var.stage}-private-route-table"
  }
  default_network_acl_tags = {
    Name = "${var.client_name}-${var.stage}-nacl"
  }
  igw_tags = {
    Name = "${var.client_name}-${var.stage}-internet-gateway"
  }
  nat_gateway_tags = {
    Name = "${var.client_name}-${var.stage}-nat-gateway"
  }
  nat_eip_tags = {
    Name = "${var.client_name}-${var.stage}-eip"
  }
  dhcp_options_tags = {
    Name = "${var.client_name}-${var.stage}-dhcp-option-set"
  }
}

module "vpc-flowlogs" {
  source             = "../../modules/aws-so-flow-logs"
  name               = "${var.client_name}-${var.stage}-flowlogs"
  vpc_id             = module.vpc.vpc_id
  access_logs_bucket = module.access-logs-bucket.bucket
  service_tags       = local.tags
}

module "vpc-endpoints" {
  source  = "../../modules/aws-so-vpc-endpoints"
  name    = "${var.client_name}-${var.stage}"
  vpc_id  = module.vpc.vpc_id
  route_table_ids = concat(
    module.vpc.private_route_table_ids,
    module.vpc.public_route_table_ids,
    module.vpc.database_route_table_ids
  )
  service_tags = local.tags
}
