<?php
declare(strict_types=1);

namespace ROITheme\Shared\Domain\Contracts;

/**
 * Contrato para repositorio de snippets CSS
 *
 * Usado por Admin (CRUD) y Public (lectura)
 */
interface CSSSnippetRepositoryInterface
{
    /**
     * Obtiene todos los snippets almacenados
     * @return array<array> Array de snippets deserializados
     */
    public function getAll(): array;

    /**
     * Guarda un snippet (crear o actualizar)
     * @param array $snippet Datos del snippet
     */
    public function save(array $snippet): void;

    /**
     * Elimina un snippet por ID
     * @param string $snippetId ID del snippet
     */
    public function delete(string $snippetId): void;

    /**
     * Obtiene snippets por tipo de carga
     * @param string $loadType 'critical' o 'deferred'
     * @return array<array>
     */
    public function getByLoadType(string $loadType): array;

    /**
     * Obtiene snippets aplicables a una página específica
     * @param string $loadType 'critical' o 'deferred'
     * @param string $pageType 'all', 'home', 'posts', 'pages', 'archives'
     * @return array<array>
     */
    public function getForPage(string $loadType, string $pageType): array;
}
