AWSTemplateFormatVersion: "2010-09-09"
Resources:
  NextjsCloudFront:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: TO_BE_REPLACED
            Id: S3Origin
            S3OriginConfig:
              OriginAccessIdentity: ""
          - DomainName: TO_BE_REPLACED
            Id: S3PublicOrigin
            OriginPath: /public
            S3OriginConfig:
              OriginAccessIdentity: ""
          - DomainName:
              Fn::Join:
                - ""
                - - Ref: ApiGatewayRestApi
                  - TO_BE_REPLACED
            Id: ApiGatewayOrigin
            OriginPath: TO_BE_REPLACED
            CustomOriginConfig:
              HTTPSPort: 443
              OriginProtocolPolicy: https-only
        Enabled: "true"
        DefaultCacheBehavior:
          AllowedMethods:
            - GET
            - HEAD
            - OPTIONS
            - PUT
            - PATCH
            - POST
            - DELETE
          TargetOriginId: ApiGatewayOrigin
          Compress: "true"
          ForwardedValues:
            QueryString: "true"
            Cookies:
              Forward: all
          ViewerProtocolPolicy: https-only
        CacheBehaviors:
          - AllowedMethods:
              - GET
              - HEAD
              - OPTIONS
            TargetOriginId: S3Origin
            Compress: "true"
            ForwardedValues:
              QueryString: "false"
              Cookies:
                Forward: none
            ViewerProtocolPolicy: https-only
            MinTTL: "50"
            PathPattern: static/*
          - AllowedMethods:
              - GET
              - HEAD
              - OPTIONS
            TargetOriginId: S3Origin
            Compress: "true"
            ForwardedValues:
              QueryString: "false"
              Cookies:
                Forward: none
            ViewerProtocolPolicy: https-only
            MinTTL: "50"
            PathPattern: _next/*
        PriceClass: PriceClass_100
Outputs:
  NextjsCloudFrontURL:
    Value: !Join ["", ["https://", !GetAtt [NextjsCloudFront, DomainName]]]
    Description: CloudFront distribution URL
