terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 6.0"
    }
  }
}

data "aws_servicequotas_service_quota" "vpcs_per_region" {
  quota_code   = "L-F678F1CE"
  service_code = "vpc"
}

resource "terraform_data" "vpcs_per_region" {
  input = data.aws_servicequotas_service_quota.vpcs_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "vpcs_per_region" {
  count        = tonumber(terraform_data.vpcs_per_region.output) < 100 ? 1 : 0
  quota_code   = "L-F678F1CE"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "nat_gateways_per_az" {
  quota_code   = "L-FE5A380F"
  service_code = "vpc"
}

resource "terraform_data" "nat_gateways_per_az" {
  input = data.aws_servicequotas_service_quota.nat_gateways_per_az.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "nat_gateways_per_az" {
  count        = tonumber(terraform_data.nat_gateways_per_az.output) < 100 ? 1 : 0
  quota_code   = "L-FE5A380F"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "internet_gateways_per_region" {
  quota_code   = "L-A4707A72"
  service_code = "vpc"
}

resource "terraform_data" "internet_gateways_per_region" {
  input = data.aws_servicequotas_service_quota.internet_gateways_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "internet_gateways_per_region" {
  count        = tonumber(terraform_data.internet_gateways_per_region.output) < 100 ? 1 : 0
  quota_code   = "L-A4707A72"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "gateway_vpc_endpoints_per_region" {
  quota_code   = "L-1B52E74A"
  service_code = "vpc"
}

resource "terraform_data" "gateway_vpc_endpoints_per_region" {
  input = data.aws_servicequotas_service_quota.gateway_vpc_endpoints_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "gateway_vpc_endpoints_per_region" {
  count        = tonumber(terraform_data.gateway_vpc_endpoints_per_region.output) < 100 ? 1 : 0
  quota_code   = "L-1B52E74A"
  service_code = "vpc"
  value        = 100
}

data "aws_servicequotas_service_quota" "managed_node_groups_per_cluster" {
  quota_code   = "L-6D54EA21"
  service_code = "eks"
}

resource "terraform_data" "managed_node_groups_per_cluster" {
  input = data.aws_servicequotas_service_quota.managed_node_groups_per_cluster.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "managed_node_groups_per_cluster" {
  count        = tonumber(terraform_data.managed_node_groups_per_cluster.output) < 90 ? 1 : 0
  quota_code   = "L-6D54EA21"
  service_code = "eks"
  value        = 90
}

data "aws_servicequotas_service_quota" "auto_scaling_groups_per_region" {
  quota_code   = "L-CDE20ADC"
  service_code = "autoscaling"
}

resource "terraform_data" "auto_scaling_groups_per_region" {
  input = data.aws_servicequotas_service_quota.auto_scaling_groups_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "auto_scaling_groups_per_region" {
  count        = tonumber(terraform_data.auto_scaling_groups_per_region.output) < 10000 ? 1 : 0
  quota_code   = "L-CDE20ADC"
  service_code = "autoscaling"
  value        = 10000
}

data "aws_servicequotas_service_quota" "running_on_demand_standard_instances" {
  quota_code   = "L-1216C47A"
  service_code = "ec2"
}

resource "terraform_data" "running_on_demand_standard_instances" {
  input = data.aws_servicequotas_service_quota.running_on_demand_standard_instances.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "running_on_demand_standard_instances" {
  count        = tonumber(terraform_data.running_on_demand_standard_instances.output) < 50000 ? 1 : 0
  quota_code   = "L-1216C47A"
  service_code = "ec2"
  value        = 50000
}

data "aws_servicequotas_service_quota" "ec2_vpc_elastic_ips" {
  quota_code   = "L-0263D0A3"
  service_code = "ec2"
}

resource "terraform_data" "ec2_vpc_elastic_ips" {
  input = data.aws_servicequotas_service_quota.ec2_vpc_elastic_ips.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "ec2_vpc_elastic_ips" {
  count        = tonumber(terraform_data.ec2_vpc_elastic_ips.output) < 300 ? 1 : 0
  quota_code   = "L-0263D0A3"
  service_code = "ec2"
  value        = 300
}

data "aws_servicequotas_service_quota" "application_load_balancers_per_region" {
  quota_code   = "L-53DA6B97"
  service_code = "elasticloadbalancing"
}

resource "terraform_data" "application_load_balancers_per_region" {
  input = data.aws_servicequotas_service_quota.application_load_balancers_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "application_load_balancers_per_region" {
  count        = tonumber(terraform_data.application_load_balancers_per_region.output) < 200 ? 1 : 0
  quota_code   = "L-53DA6B97"
  service_code = "elasticloadbalancing"
  value        = 200
}

data "aws_servicequotas_service_quota" "network_load_balancers_per_region" {
  quota_code   = "L-69A177A2"
  service_code = "elasticloadbalancing"
}

resource "terraform_data" "network_load_balancers_per_region" {
  input = data.aws_servicequotas_service_quota.network_load_balancers_per_region.value
  lifecycle {
    ignore_changes = [input]
  }
}

resource "aws_servicequotas_service_quota" "network_load_balancers_per_region" {
  count        = tonumber(terraform_data.network_load_balancers_per_region.output) < 200 ? 1 : 0
  quota_code   = "L-69A177A2"
  service_code = "elasticloadbalancing"
  value        = 200
}
