<?php
declare(strict_types=1);

namespace ROITheme\Shared\Domain\Contracts;

/**
 * Contrato para acceder a la configuración de visibilidad por página
 *
 * @package ROITheme\Shared\Domain\Contracts
 */
interface PageVisibilityRepositoryInterface
{
    /**
     * Obtiene la configuración de visibilidad de un componente
     *
     * @param string $componentName Nombre del componente (kebab-case)
     * @return array<string, bool> Mapa de campo => habilitado
     */
    public function getVisibilityConfig(string $componentName): array;

    /**
     * Guarda la configuración de visibilidad de un componente
     *
     * @param string $componentName Nombre del componente
     * @param array<string, bool> $config Configuración a guardar
     */
    public function saveVisibilityConfig(string $componentName, array $config): void;

    /**
     * Verifica si existe configuración de visibilidad para un componente
     */
    public function hasVisibilityConfig(string $componentName): bool;

    /**
     * Obtiene lista de todos los componentes registrados
     *
     * @return array<string> Lista de nombres de componentes
     */
    public function getAllComponentNames(): array;

    /**
     * Crea configuración de visibilidad por defecto para un componente
     *
     * @param string $componentName Nombre del componente
     * @param array<string, bool> $defaults Valores por defecto
     */
    public function createDefaultVisibility(string $componentName, array $defaults): void;
}
