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

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "qa/dns/qaorch.com/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_vpc" "main" {
  tags = {
    Name = "prod"
  }
}

resource "aws_route53_zone" "main" {
  # checkov:skip=CKV2_AWS_38: Not applicable to private zones
  # checkov:skip=CKV2_AWS_39: Not applicable to private zones
  name = var.route53_zone_name

  vpc {
    vpc_id = data.aws_vpc.main.id
  }

  dynamic "vpc" {
    for_each = var.authorised_vpc_ids
    content {
      vpc_id = vpc.value
    }
  }

  tags = {
    Name        = var.route53_zone_name
    Description = "R53 zone for ${var.route53_zone_name}"
  }
}

resource "aws_route53_vpc_association_authorization" "main" {
  for_each = var.authorised_vpc_ids

  vpc_id  = each.value
  zone_id = aws_route53_zone.main.id
}

resource "aws_route53_record" "A_records" {
  # checkov:skip=CKV2_AWS_23:Avoid Error: Route53 A Record does not have Attached Resource
  for_each = var.a_records
  zone_id  = aws_route53_zone.main.zone_id
  name     = each.key
  type     = "A"
  ttl      = each.value.ttl
  records  = each.value.records
}

resource "aws_route53_record" "cname_records" {
  for_each = var.cname_records
  zone_id  = aws_route53_zone.main.zone_id
  name     = each.key
  type     = "CNAME"
  ttl      = each.value.ttl
  records  = each.value.records
}
