<?php

class ImageOptimizer
{
    /**
     * Generate responsive image attributes for lazy loading
     */
    public static function generateImageAttrs(string $src, string $alt = '', array $sizes = []): string
    {
        $attrs = [];
        
        // Lazy loading
        $attrs[] = 'loading="lazy"';
        $attrs[] = 'data-src="' . htmlspecialchars($src) . '"';
        $attrs[] = 'src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg=="';
        $attrs[] = 'class="lazy transition-opacity duration-300"';
        
        // Alt text
        if ($alt) {
            $attrs[] = 'alt="' . htmlspecialchars($alt) . '"';
        }
        
        // Responsive sizes
        if (!empty($sizes)) {
            $srcset = self::generateSrcset($src, $sizes);
            $attrs[] = 'data-srcset="' . $srcset . '"';
            $attrs[] = 'sizes="100vw"';
        }
        
        return implode(' ', $attrs);
    }
    
    /**
     * Generate srcset for responsive images
     */
    private static function generateSrcset(string $src, array $sizes): string
    {
        $srcset = [];
        $pathInfo = pathinfo($src);
        $extension = $pathInfo['extension'] ?? 'jpg';
        $basename = $pathInfo['filename'] ?? 'image';
        $dirname = $pathInfo['dirname'] ?? '';
        
        foreach ($sizes as $size) {
            $responsiveSrc = $dirname . '/' . $basename . '_' . $size . '.' . $extension;
            $srcset[] = $responsiveSrc . ' ' . $size . 'w';
        }
        
        return implode(', ', $srcset);
    }
    
    /**
     * Get WebP version of image if available
     */
    public static function getWebpSrc(string $src): string
    {
        $pathInfo = pathinfo($src);
        $webpSrc = $pathInfo['dirname'] . '/' . $pathInfo['filename'] . '.webp';
        
        // Check if WebP version exists (you would need to generate these)
        return $webpSrc;
    }
    
    /**
     * Generate picture element with WebP fallback
     */
    public static function generatePictureElement(string $src, string $alt = '', array $sizes = []): string
    {
        $webpSrc = self::getWebpSrc($src);
        $imgAttrs = self::generateImageAttrs($src, $alt, $sizes);
        
        $picture = '<picture>';
        
        // WebP source
        $picture .= '<source type="image/webp" data-srcset="' . $webpSrc . '">';
        
        // Original format source
        $picture .= '<source type="image/' . pathinfo($src, PATHINFO_EXTENSION) . '" data-srcset="' . $src . '">';
        
        // Fallback img
        $picture .= '<img ' . $imgAttrs . '>';
        
        $picture .= '</picture>';
        
        return $picture;
    }
    
    /**
     * Add critical image loading for above-the-fold images
     */
    public static function generateCriticalImageAttrs(string $src, string $alt = '', array $sizes = []): string
    {
        $attrs = [];
        
        // No lazy loading for critical images
        $attrs[] = 'src="' . htmlspecialchars($src) . '"';
        $attrs[] = 'loading="eager"';
        $attrs[] = 'fetchpriority="high"';
        $attrs[] = 'decoding="sync"';
        
        // Alt text
        if ($alt) {
            $attrs[] = 'alt="' . htmlspecialchars($alt) . '"';
        }
        
        // Responsive sizes
        if (!empty($sizes)) {
            $srcset = self::generateSrcset($src, $sizes);
            $attrs[] = 'srcset="' . $srcset . '"';
            $attrs[] = 'sizes="100vw"';
        }
        
        return implode(' ', $attrs);
    }
}
