locals {
  vpc_component       = "vpc" # Virtual Private Cloud (VPC)
  flow_logs_component = "vpc-flow-logs"
  s3_bucket_component = "s3"
}

resource "aws_vpc" "main" {
  cidr_block           = var.cidr
  instance_tenancy     = "default"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = merge(
    {
      Component = local.vpc_component
      Name      = join("-", [var.common_tags.Environment, var.common_tags.Product, local.vpc_component])
    }
  )
}

resource "aws_flow_log" "main" {
  count = var.flow_logs ? 1 : 0

  log_destination      = aws_s3_bucket.vpc_flow_logs[0].arn
  log_destination_type = "s3"
  traffic_type         = "ALL"
  vpc_id               = aws_vpc.main.id

  tags = merge(
    {
      Component = local.flow_logs_component
      Name      = join("-", [var.common_tags.Environment, var.common_tags.Product, local.flow_logs_component])
    }
  )
}

resource "aws_s3_bucket" "vpc_flow_logs" {
  count = var.flow_logs ? 1 : 0

  acl           = "private"
  bucket        = "vpc-flow-logs-${aws_vpc.main.id}"
  force_destroy = true

  tags = merge(
    {
      Component = local.s3_bucket_component
      Name      = join("-", [var.common_tags.Environment, var.common_tags.Product, local.s3_bucket_component])
    }
  )
}