<?php
declare(strict_types=1);

namespace ROITheme\Public\CriticalCSS\Domain\Contracts;

/**
 * Interface para cache de CSS critico
 *
 * Define el contrato para almacenamiento y recuperacion
 * de CSS critico generado (TIPO 4).
 *
 * @package ROITheme\Public\CriticalCSS\Domain\Contracts
 */
interface CriticalCSSCacheInterface
{
    /**
     * Obtiene CSS del cache
     *
     * @param string $key Clave del cache (ej: 'variables', 'responsive')
     * @return string|null CSS cacheado o null si no existe
     */
    public function get(string $key): ?string;

    /**
     * Guarda CSS en cache
     *
     * @param string $key Clave del cache
     * @param string $css Contenido CSS a guardar
     * @return bool True si se guardo correctamente
     */
    public function set(string $key, string $css): bool;

    /**
     * Verifica si existe en cache
     *
     * @param string $key Clave del cache
     * @return bool True si existe
     */
    public function has(string $key): bool;

    /**
     * Limpia todo el cache
     *
     * @return void
     */
    public function clear(): void;

    /**
     * Verifica si el cache esta desactualizado respecto al archivo fuente
     *
     * Compara filemtime del archivo fuente vs archivo cache.
     * Si el fuente es mas nuevo, el cache esta desactualizado.
     *
     * @param string $key Clave del cache
     * @param string $sourceFile Ruta absoluta al archivo fuente
     * @return bool True si el cache es mas viejo que el fuente
     */
    public function isStale(string $key, string $sourceFile): bool;
}
