# 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
  <FilesMatch "\.(js|wasm|data|symbols\.json)(\.br|\.gz)?$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>
</IfModule>
