<?php
declare(strict_types=1);

namespace ROITheme\Shared\Application\UseCases;

use ROITheme\Shared\Domain\Contracts\WrapperVisibilityCheckerInterface;

/**
 * UseCase: Verificar si un wrapper de componente debe renderizarse
 *
 * Responsabilidad: Orquestar la lógica de verificación de visibilidad
 * combinando múltiples criterios:
 * 1. Componente habilitado (is_enabled)
 * 2. Visible en dispositivo actual (show_on_mobile/desktop)
 * 3. No excluido por reglas (categoría, post ID, URL, page visibility)
 *
 * @package ROITheme\Shared\Application\UseCases
 * @see Plan 99.15 - Fix Empty Layout Wrappers
 */
final class CheckWrapperVisibilityUseCase
{
    public function __construct(
        private readonly WrapperVisibilityCheckerInterface $visibilityChecker
    ) {}

    /**
     * Ejecuta la verificación de visibilidad del wrapper
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @param bool $isMobile True si es dispositivo móvil
     * @return bool True si el wrapper debe renderizarse
     */
    public function execute(string $componentName, bool $isMobile): bool
    {
        // Criterio 1: Debe estar habilitado
        if (!$this->visibilityChecker->isEnabled($componentName)) {
            return false;
        }

        // Criterio 2: Debe ser visible en el dispositivo actual
        if (!$this->visibilityChecker->isVisibleOnDevice($componentName, $isMobile)) {
            return false;
        }

        // Criterio 3: No debe estar excluido
        if (!$this->visibilityChecker->isNotExcluded($componentName)) {
            return false;
        }

        return true;
    }
}
