# Enable compression encodings
AddEncoding br .br
AddEncoding gzip .gz

# Enable rewrites
<IfModule mod_rewrite.c>
  RewriteEngine On

  # Prefer Brotli if supported
  RewriteCond %{HTTP:Accept-Encoding} br
  RewriteCond %{REQUEST_FILENAME}.br -f
  RewriteRule ^(.*\.wasm)$ $1.br [L]
  RewriteCond %{HTTP:Accept-Encoding} br
  RewriteCond %{REQUEST_FILENAME}.br -f
  RewriteRule ^(.*\.js)$ $1.br [L]
  RewriteCond %{HTTP:Accept-Encoding} br
  RewriteCond %{REQUEST_FILENAME}.br -f
  RewriteRule ^(.*\.data)$ $1.br [L]
  RewriteCond %{HTTP:Accept-Encoding} br
  RewriteCond %{REQUEST_FILENAME}.br -f
  RewriteRule ^(.*\.symbols\.json)$ $1.br [L]

  # Fallback to Gzip if Brotli not supported
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule ^(.*\.wasm)$ $1.gz [L]
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule ^(.*\.js)$ $1.gz [L]
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule ^(.*\.data)$ $1.gz [L]
  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteCond %{REQUEST_FILENAME}.gz -f
  RewriteRule ^(.*\.symbols\.json)$ $1.gz [L]
</IfModule>

# Add correct MIME types
AddType application/wasm .wasm .wasm.gz .wasm.br
AddType application/javascript .js .js.gz .js.br
AddType application/octet-stream .data .data.gz .data.br
AddType application/json .json .json.gz .json.br

# Set encoding and content types manually for precompressed files
<IfModule mod_headers.c>
  # Brotli
  <FilesMatch "\.wasm\.br$">
    Header set Content-Encoding br
    Header set Content-Type application/wasm
  </FilesMatch>
  <FilesMatch "\.js\.br$">
    Header set Content-Encoding br
    Header set Content-Type application/javascript
  </FilesMatch>
  <FilesMatch "\.data\.br$">
    Header set Content-Encoding br
    Header set Content-Type application/octet-stream
  </FilesMatch>
  <FilesMatch "\.symbols\.json\.br$">
    Header set Content-Encoding br
    Header set Content-Type application/json
  </FilesMatch>

  # Gzip
  <FilesMatch "\.wasm\.gz$">
    Header set Content-Encoding gzip
    Header set Content-Type application/wasm
  </FilesMatch>
  <FilesMatch "\.js\.gz$">
    Header set Content-Encoding gzip
    Header set Content-Type application/javascript
  </FilesMatch>
  <FilesMatch "\.data\.gz$">
    Header set Content-Encoding gzip
    Header set Content-Type application/octet-stream
  </FilesMatch>
  <FilesMatch "\.symbols\.json\.gz$">
    Header set Content-Encoding gzip
    Header set Content-Type application/json
  </FilesMatch>

  # Set long-term caching for Unity build files (overridden below)
  <FilesMatch "\.(js|wasm|data|symbols\.json)(\.br|\.gz)?$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>

  # OVERRIDES: Disable caching for all Unity build files
  <FilesMatch "\.(data|wasm|js|framework.js|loader.js|symbols\.json)(\.br|\.gz)?$">
    FileETag None
    Header unset ETag
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
  </FilesMatch>
  
  # Prevent caching of the index.html file
<FilesMatch "^index\.html$">
    FileETag None
    <IfModule mod_headers.c>
        Header unset ETag
        Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
        Header set Pragma "no-cache"
        Header set Expires "0"
    </IfModule>
</FilesMatch>

  
</IfModule>
