data "aws_cloudfront_cache_policy" "caching_optimized" {
	name = "Managed-CachingOptimized"
}

data "aws_cloudfront_response_headers_policy" "simple_cors" {
	name = "Managed-SimpleCORS"
}

resource "aws_cloudfront_distribution" "reservation_widget" {
	enabled     = true
	price_class = "PriceClass_100"

	origin {
		domain_name = aws_s3_bucket.static.bucket_regional_domain_name
		origin_id   = "widget"
		origin_path = "/reservation-widget"
	}

	aliases = ["reservation-widget.${var.base_domain}"]

	default_cache_behavior {
		target_origin_id = "widget"
		allowed_methods  = ["GET", "HEAD"]
		cached_methods   = ["GET", "HEAD"]

		cache_policy_id            = data.aws_cloudfront_cache_policy.caching_optimized.id
		response_headers_policy_id = data.aws_cloudfront_response_headers_policy.simple_cors.id

		viewer_protocol_policy = "allow-all"
		compress               = true
	}

	restrictions {
		geo_restriction {
			restriction_type = "none"
			locations        = []
		}
	}

	viewer_certificate {
		acm_certificate_arn      = aws_acm_certificate_validation.cert.certificate_arn
		ssl_support_method       = "sni-only"
		minimum_protocol_version = "TLSv1.2_2021"
	}
}

resource "aws_route53_record" "reservation_widget_cloudfront" {
	zone_id = local.route53_zone_id
	name    = "reservation-widget.${var.base_domain}"
	type    = "A"

	alias {
		name                   = aws_cloudfront_distribution.reservation_widget.domain_name
		zone_id                = aws_cloudfront_distribution.reservation_widget.hosted_zone_id
		evaluate_target_health = false
	}
}
