/**
 * TIPO 5: Lazy CSS Loader
 *
 * Carga CSS no critico despues del evento load usando:
 * - requestIdleCallback para CSS de baja prioridad
 * - Event listeners para CSS condicional
 *
 * @package ROITheme
 * @since 1.0.20
 */
(function() {
    'use strict';

    // Configuracion de CSS lazy (inyectada desde PHP)
    var config = window.roiLazyCSSConfig || {
        baseUrl: '',
        version: '1.0.0',
        idleTimeout: 2000,
        cssFiles: []
    };

    /**
     * Carga un archivo CSS de forma asincrona
     *
     * @param {string} href URL del archivo CSS
     * @param {string} id ID del elemento link
     * @returns {Promise}
     */
    function loadCSS(href, id) {
        // Evitar duplicados
        if (document.getElementById(id)) {
            return Promise.resolve();
        }

        return new Promise(function(resolve, reject) {
            var link = document.createElement('link');
            link.id = id;
            link.rel = 'stylesheet';
            link.href = href;
            link.onload = resolve;
            link.onerror = reject;
            document.head.appendChild(link);
        });
    }

    /**
     * Carga CSS cuando el navegador esta idle
     *
     * @param {Array} files Lista de archivos a cargar
     */
    function loadOnIdle(files) {
        var load = function() {
            files.forEach(function(file) {
                loadCSS(
                    config.baseUrl + file.path + '?ver=' + config.version,
                    'roi-lazy-' + file.id
                );
            });
        };

        if ('requestIdleCallback' in window) {
            requestIdleCallback(load, { timeout: config.idleTimeout });
        } else {
            // Fallback para Safari
            setTimeout(load, config.idleTimeout);
        }
    }

    /**
     * Carga CSS de print solo cuando se va a imprimir
     *
     * @param {Object} file Archivo de print CSS
     */
    function setupPrintCSS(file) {
        var loaded = false;

        var load = function() {
            if (loaded) return;
            loaded = true;
            loadCSS(
                config.baseUrl + file.path + '?ver=' + config.version,
                'roi-lazy-print'
            );
        };

        // Evento antes de imprimir
        window.addEventListener('beforeprint', load);

        // Fallback: detectar Ctrl+P / Cmd+P
        document.addEventListener('keydown', function(e) {
            if ((e.ctrlKey || e.metaKey) && e.key === 'p') {
                load();
            }
        });
    }

    /**
     * Inicializacion
     */
    function init() {
        var idleFiles = [];
        var printFile = null;

        config.cssFiles.forEach(function(file) {
            switch (file.trigger) {
                case 'idle':
                    idleFiles.push(file);
                    break;
                case 'print':
                    printFile = file;
                    break;
            }
        });

        // Cargar CSS idle despues de que la pagina este lista
        if (idleFiles.length > 0) {
            if (document.readyState === 'complete') {
                loadOnIdle(idleFiles);
            } else {
                window.addEventListener('load', function() {
                    loadOnIdle(idleFiles);
                });
            }
        }

        // Configurar CSS de print
        if (printFile) {
            setupPrintCSS(printFile);
        }
    }

    // Iniciar
    init();

})();
