<?php
/**
 * WP-CLI Command para generar CSS critico TIPO 4
 *
 * Uso:
 *   wp roi-theme generate-critical-css
 *   wp roi-theme generate-critical-css --clear
 *
 * @package ROITheme
 */

if (!defined('WP_CLI')) {
    return;
}

use ROITheme\Public\CriticalCSS\Infrastructure\Cache\CriticalCSSFileCache;
use ROITheme\Public\CriticalCSS\Infrastructure\Services\CriticalCSSExtractor;
use ROITheme\Public\CriticalCSS\Application\UseCases\GetCriticalCSSUseCase;

/**
 * Comandos para gestionar CSS critico TIPO 4
 */
class ROI_CriticalCSS_Command
{
    /**
     * Genera CSS critico para todas las paginas
     *
     * ## OPTIONS
     *
     * [--clear]
     * : Limpia cache antes de regenerar
     *
     * ## EXAMPLES
     *
     *     wp roi-theme generate-critical-css
     *     wp roi-theme generate-critical-css --clear
     *
     * @when after_wp_load
     */
    public function __invoke($args, $assoc_args)
    {
        $cache = new CriticalCSSFileCache();
        $extractor = new CriticalCSSExtractor($cache);
        $useCase = new GetCriticalCSSUseCase($cache, $extractor);

        // Limpiar cache si se solicita
        if (isset($assoc_args['clear'])) {
            $cache->clear();
            WP_CLI::log('Cache limpiado.');
        }

        WP_CLI::log('Generando CSS critico TIPO 4...');

        $results = $useCase->regenerate();

        if (empty($results)) {
            WP_CLI::warning('No se genero CSS critico. Verifica que existan los archivos fuente.');
            return;
        }

        foreach ($results as $type => $size) {
            WP_CLI::success(sprintf(
                '%s.critical.css: %s bytes',
                $type,
                number_format($size)
            ));
        }

        WP_CLI::success('CSS critico TIPO 4 generado exitosamente.');
    }
}

WP_CLI::add_command('roi-theme generate-critical-css', 'ROI_CriticalCSS_Command');
