<?php

declare(strict_types=1);

namespace App\Domain\Meta\Repository;

use App\Domain\Meta\Entity\MetaEntry;

interface MetaRepositoryInterface
{
    /**
     * Findet Meta-Daten für eine Route
     */
    public function findByRoute(string $route): ?MetaEntry;

    /**
     * Findet Meta-Daten für eine Entity
     */
    public function findByEntity(string $entityType, int $entityId): ?MetaEntry;

    /**
     * Findet alle aktiven Meta-Einträge für eine Route (sortiert nach Priorität)
     */
    public function findAllByRoute(string $route): array;

    /**
     * Speichert einen Meta-Eintrag
     */
    public function save(MetaEntry $entry): MetaEntry;

    /**
     * Löscht einen Meta-Eintrag
     */
    public function delete(int $id): bool;

    /**
     * Findet einen Meta-Eintrag anhand der ID
     */
    public function findById(int $id): ?MetaEntry;

    /**
     * Findet alle Meta-Einträge (mit Paginierung)
     */
    public function findAll(int $limit = 50, int $offset = 0): array;

    /**
     * Sucht Meta-Einträge nach Pattern
     */
    public function search(string $query, int $limit = 50): array;

    /**
     * Zählt alle Meta-Einträge
     */
    public function count(): int;

    /**
     * Prüft ob ein Route-Pattern bereits existiert
     */
    public function routePatternExists(string $routePattern, ?int $excludeId = null): bool;

    /**
     * Prüft ob eine Entity bereits Meta-Daten hat
     */
    public function entityMetaExists(string $entityType, int $entityId, ?int $excludeId = null): bool;
}
