"""Interfejs silnika efemeryd (LOG-24). To jest „wymienny silnik liczący". Dziś realizują go: SkyfieldEngine (własny, permisywny, in-process) i RemoteEngine (klient izolowanej usługi swisseph, AGPL). Warstwa logiczna woła tylko ten interfejs — nie wie, który silnik liczy. """ from __future__ import annotations from abc import ABC, abstractmethod from app.engine.models import ChartMoment, ObjectPosition class EphemerisEngine(ABC): name: str = "base" @abstractmethod def positions( self, moment: ChartMoment, objects: list[str] | None = None ) -> list[ObjectPosition]: """Pozycje obiektów dla danego momentu (LOG-01). None = zestaw domyślny.""" def health(self) -> dict: return {"engine": self.name, "status": "ok"}