<?php
declare(strict_types=1);

namespace ROITheme\Shared\Domain\Contracts;

/**
 * Interface para verificar visibilidad de wrappers de componentes
 *
 * Responsabilidad: Definir contrato para determinar si un wrapper
 * de componente debe renderizarse basándose en:
 * - Estado habilitado/deshabilitado
 * - Visibilidad por dispositivo
 * - Reglas de exclusión (categoría, post ID, URL pattern, page visibility)
 *
 * @package ROITheme\Shared\Domain\Contracts
 * @see Plan 99.15 - Fix Empty Layout Wrappers
 */
interface WrapperVisibilityCheckerInterface
{
    /**
     * Verifica si el componente está habilitado globalmente
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @return bool True si is_enabled = true en BD
     */
    public function isEnabled(string $componentName): bool;

    /**
     * Verifica si el componente es visible en el dispositivo actual
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @param bool $isMobile True si es dispositivo móvil
     * @return bool True si show_on_mobile/show_on_desktop según corresponda
     */
    public function isVisibleOnDevice(string $componentName, bool $isMobile): bool;

    /**
     * Verifica si el componente NO está excluido para la página actual
     *
     * Evalúa todas las reglas de exclusión:
     * - Exclusión por categoría
     * - Exclusión por post ID
     * - Exclusión por URL pattern
     * - Page visibility (home, posts, pages, archives, search)
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @return bool True si el componente NO está excluido
     */
    public function isNotExcluded(string $componentName): bool;
}
