<?php
declare(strict_types=1);

namespace ROITheme\Shared\Infrastructure\Services;

use ROITheme\Shared\Infrastructure\Di\DIContainer;

/**
 * Facade/Helper para evaluar visibilidad completa de componentes
 *
 * PROPOSITO:
 * Permite que los Renderers existentes evaluen visibilidad sin modificar sus constructores.
 * Ahora incluye tanto visibilidad por tipo de pagina como reglas de exclusion.
 *
 * USO EN RENDERERS:
 * ```php
 * if (!PageVisibilityHelper::shouldShow('cta-box-sidebar')) {
 *     return '';
 * }
 * ```
 *
 * FLUJO:
 * 1. Verifica visibilidad por tipo de pagina (home, posts, pages, etc.)
 * 2. Verifica reglas de exclusion (categorias, IDs, patrones URL)
 * 3. Retorna true SOLO si pasa ambas verificaciones
 *
 * @package ROITheme\Shared\Infrastructure\Services
 */
final class PageVisibilityHelper
{
    /**
     * Evalua si un componente debe mostrarse en la pagina actual
     *
     * Incluye verificacion de:
     * - Visibilidad por tipo de pagina (Plan 99.10)
     * - Reglas de exclusion (Plan 99.11)
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @return bool True si debe mostrarse
     */
    public static function shouldShow(string $componentName): bool
    {
        $container = DIContainer::getInstance();
        $useCase = $container->getEvaluateComponentVisibilityUseCase();

        return $useCase->execute($componentName);
    }

    /**
     * Evalua SOLO visibilidad por tipo de pagina (sin exclusiones)
     *
     * @deprecated Usar shouldShow() que incluye exclusiones
     * @param string $componentName Nombre del componente (kebab-case)
     * @return bool True si debe mostrarse segun tipo de pagina
     */
    public static function shouldShowByPageType(string $componentName): bool
    {
        $container = DIContainer::getInstance();
        $useCase = $container->getEvaluatePageVisibilityUseCase();

        return $useCase->execute($componentName);
    }
}
