"""Abstract base class for regulatory event stores."""

from __future__ import annotations

from abc import ABC, abstractmethod


class BaseEventStore(ABC):
    """Port interface for regulatory event persistence."""

    @abstractmethod
    def all(self) -> list[dict]:
        """Return all events, most-recent first."""

    @abstractmethod
    def get(self, event_id: str) -> dict | None:
        """Return a single event by ID, or None."""

    @abstractmethod
    def filter(
        self,
        *,
        source: str | None = None,
        impact_level: str | None = None,
        limit: int = 50,
    ) -> list[dict]:
        """Return filtered events sorted by published_at descending."""

    @abstractmethod
    def stats(self) -> dict:
        """Return {total, high_impact, medium_impact, low_impact, recent_90d}."""

    @abstractmethod
    def upsert(self, event: dict) -> None:
        """Insert or update an event record."""

    @abstractmethod
    def get_by_standard_code(self, standard_code: str) -> dict | None:
        """Return the most-recent event with matching standard_code, or None."""
