<?php
declare(strict_types=1);

namespace ROITheme\Public\CriticalCSS\Domain\Contracts;

/**
 * Interface para extraccion de CSS critico
 *
 * Define el contrato para extraer CSS critico de archivos fuente
 * y generar versiones optimizadas para inline (TIPO 4).
 *
 * @package ROITheme\Public\CriticalCSS\Domain\Contracts
 */
interface CriticalCSSExtractorInterface
{
    /**
     * Extrae CSS de variables
     *
     * El archivo css-global-variables.css completo es critico
     * porque define las variables CSS usadas en todo el sitio.
     *
     * @return string CSS de variables minificado
     */
    public function extractVariables(): string;

    /**
     * Extrae media queries criticas
     *
     * Solo extrae breakpoints mobile-first criticos de
     * css-global-responsive.css para evitar layout shift.
     *
     * @return string CSS responsive critico minificado
     */
    public function extractResponsive(): string;

    /**
     * Genera y cachea todo el CSS critico
     *
     * Extrae variables y responsive, los minifica y guarda en cache.
     *
     * @return array<string, int> Mapa de tipo => bytes generados
     */
    public function generateAll(): array;

    /**
     * Verifica si algun archivo fuente ha cambiado
     * respecto al cache generado
     *
     * Usado para auto-regeneracion en el bootstrap.
     *
     * @return bool True si se necesita regenerar
     */
    public function needsRegeneration(): bool;
}
