# =========================================================
# PERFORMANCE OPTIMIZATION
# Ella Villa NineArch
# =========================================================

# ---------------------------------------------------------
# 1. GZIP / DEFLATE COMPRESSION
# ---------------------------------------------------------
<IfModule mod_deflate.c>

    # HTML
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml

    # CSS
    AddOutputFilterByType DEFLATE text/css

    # JavaScript
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript

    # XML / JSON / Text
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE text/plain

    # SVG
    AddOutputFilterByType DEFLATE image/svg+xml

    # Fonts
    AddOutputFilterByType DEFLATE font/ttf
    AddOutputFilterByType DEFLATE font/otf
    AddOutputFilterByType DEFLATE font/woff
    AddOutputFilterByType DEFLATE font/woff2
    AddOutputFilterByType DEFLATE application/vnd.ms-fontobject

    # Avoid compression issues with already compressed files
    <IfModule mod_setenvif.c>
        SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png|webp|avif|mp4|webm|zip|gz|pdf)$" no-gzip dont-vary
    </IfModule>

</IfModule>


# ---------------------------------------------------------
# 2. BROWSER CACHING
# ---------------------------------------------------------
<IfModule mod_expires.c>

    ExpiresActive On

    # Images
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/avif "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"

    # Fonts
    ExpiresByType font/ttf "access plus 1 year"
    ExpiresByType font/otf "access plus 1 year"
    ExpiresByType font/woff "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType application/font-woff "access plus 1 year"

    # Video
    ExpiresByType video/mp4 "access plus 1 year"
    ExpiresByType video/webm "access plus 1 year"
    ExpiresByType video/mpeg "access plus 1 year"

    # CSS
    ExpiresByType text/css "access plus 1 month"

    # JavaScript
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"

    # PDF
    ExpiresByType application/pdf "access plus 1 month"

</IfModule>


# ---------------------------------------------------------
# 3. CACHE-CONTROL HEADERS
# ---------------------------------------------------------
<IfModule mod_headers.c>

    # Static assets - cache for 1 year
    <FilesMatch "\.(?:jpg|jpeg|png|gif|webp|avif|svg|ico|woff|woff2|ttf|otf|css|js)$">
        Header set Cache-Control "public, max-age=31536000, immutable"
    </FilesMatch>

</IfModule>