

resource "aws_cloudfront_origin_access_identity" "mct_frontend_identity" {
  comment = "Cloudfront access identity for accessing bucket ${module.s3_crm-marketing-campaign-assets.bucket.id}"
}

data "aws_cloudfront_response_headers_policy" "cors_policy" {
  name = "Managed-CORS-with-preflight-and-SecurityHeadersPolicy"
}

resource "aws_cloudfront_distribution" "mct_frontend_static_distribution" {
  enabled      = true
  price_class  = "PriceClass_200"
  http_version = "http2"
  web_acl_id   = data.aws_wafv2_web_acl.ioc_web_acl_global.arn

  aliases = [
    "cdn.sonymusicfans.com"
  ]

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

  origin {
    origin_id   = "origin-bucket-${module.s3_crm-marketing-campaign-assets.bucket.id}"
    domain_name = module.s3_crm-marketing-campaign-assets.bucket.bucket_domain_name

    s3_origin_config {
      origin_access_identity = aws_cloudfront_origin_access_identity.mct_frontend_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.s3_crm-marketing-campaign-assets.bucket.id}"
    min_ttl          = "43200"  // 12 hours
    default_ttl      = "86400"  // 1 day
    max_ttl          = "604800" // 1 week
    // This redirects any HTTP request to HTTPS. Security first!
    viewer_protocol_policy     = "redirect-to-https"
    compress                   = true
    response_headers_policy_id = data.aws_cloudfront_response_headers_policy.cors_policy.id

    forwarded_values {
      query_string = false
      headers      = ["Origin"]
      cookies {
        forward = "none"
      }
    }
  }

  restrictions {
    geo_restriction {
      restriction_type = "none"
    }
  }

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

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