module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  team_name          = var.team_name
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}
# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "qa/terraform-aws-waf/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

module "environment_web_acls" {
  source            = "git@github.com:theorchard/terraform-aws-waf.git//?ref=2.0.2"
  environment       = var.environment
  aws_region        = var.aws_region
  count_waf_enabled = true
  block_waf_enabled = true
  excluded_rules = [
    "NoUserAgent_HEADER",
    "SizeRestrictions_BODY",
  ]

  logging_config_default_destination = "arn:aws:firehose:us-east-1:437795906767:deliverystream/aws-waf-logs-tf-orcd-prod-stream"
}

module "gsirt_blocking_rule_group" {
  source                 = "git@github.com:theorchard/terraform-gsirt-waf-ip-block-rule.git//?ref=1.1.1"
  environment            = var.environment
  reuse_existing_ip_sets = true
}

data "aws_vpc" "graphql_switchboard_vpc" {
  tags = {
    Name = "${var.environment}-graphql-switchboard-vpc"
  }
}

data "aws_subnets" "private_graphql_switchboard" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.graphql_switchboard_vpc.id]
  }
  tags = {
    Name = "*graphql-switchboard-private-subnet*"
  }
}

data "aws_subnet" "private_graphql_switchboard" {
  for_each = toset(data.aws_subnets.private_graphql_switchboard.ids)
  id       = each.value
}

resource "aws_wafv2_ip_set" "graphql_switchboard_private" {
  name               = "${var.environment}_graphql_switchboard_private"
  scope              = "REGIONAL"
  ip_address_version = "IPV4"
  addresses          = [for s in data.aws_subnet.private_graphql_switchboard : s.cidr_block]
}
