<?php
declare(strict_types=1);

namespace ROITheme\Shared\Domain\ValueObjects;

/**
 * Clase base abstracta para reglas de exclusion
 *
 * Define el contrato comun para todos los tipos de exclusion.
 * Cada implementacion concreta define su logica de matching.
 *
 * @package ROITheme\Shared\Domain\ValueObjects
 */
abstract class ExclusionRule
{
    /**
     * Evalua si el contexto actual coincide con la regla
     *
     * @param array<string, mixed> $context Contexto de la pagina actual
     * @return bool True si el contexto coincide (debe excluirse)
     */
    abstract public function matches(array $context): bool;

    /**
     * Verifica si la regla tiene valores configurados
     *
     * @return bool True si hay valores configurados
     */
    abstract public function hasValues(): bool;

    /**
     * Serializa los valores para almacenamiento
     *
     * @return string JSON string
     */
    abstract public function serialize(): string;
}
