resource "aws_cloudfront_origin_access_identity" "cross_products_documentation_access_identity" {
  comment = "Cloudfront access identity for accessing bucket ${module.cross_products_documentation.bucket.id}"
}

resource "aws_cloudfront_distribution" "cross_products_documentation_cdn" {
  enabled      = true
  price_class  = "PriceClass_100"
  http_version = "http2"
  aliases      = [module.domains[local.env_prefix]["cross_product"]]
  web_acl_id   = "arn:aws:wafv2:us-east-1:483193324480:global/webacl/gdb-infra-dev_web_acl/40bc7742-41db-4a16-bdf7-b6a64de9847f"

  logging_config {
    include_cookies = false
    bucket          = data.aws_s3_bucket.security_logs.bucket_domain_name
    prefix          = "cf/${local.name_prefix}-cross_products_documentation"
  }

  origin {
    origin_id   = "origin-bucket-${module.cross_products_documentation.bucket.id}"
    domain_name = module.cross_products_documentation.bucket.bucket_regional_domain_name

    s3_origin_config {
      origin_access_identity = aws_cloudfront_origin_access_identity.cross_products_documentation_access_identity.cloudfront_access_identity_path
    }
  }

  default_root_object = "index.html"

  default_cache_behavior {
    allowed_methods        = ["GET", "HEAD"]
    cached_methods         = ["GET", "HEAD"]
    target_origin_id       = "origin-bucket-${module.cross_products_documentation.bucket.id}"
    min_ttl                = "0"
    default_ttl            = "3600"
    max_ttl                = "86400"
    viewer_protocol_policy = "redirect-to-https"
    compress               = true

    forwarded_values {
      query_string = false

      cookies {
        forward = "none"
      }
    }

    lambda_function_association {
      event_type   = "viewer-request"
      lambda_arn   = "${aws_lambda_function.cf-atlas-auth_lambda.arn}:${aws_lambda_function.cf-atlas-auth_lambda.version}"
      include_body = false
    }
  }

  restrictions {
    geo_restriction {
      restriction_type = "none"
    }
  }

  viewer_certificate {
    acm_certificate_arn      = aws_acm_certificate.atlas_stream_cert.arn
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2021"
  }

  tags = merge(
    local.common_tags,
    {
      project                  = "Core",
      service                  = "Cloudfront",
      plat_env_project_service = "${local.aggregated_tag}_CORE_CFR"
    }
  )
}
