from typing import Optional

from .base import ResultManagerBase
from models.results import FrameResult, FlightResults, RefinedFrameResult
from models.core import GPSPoint


class ResultManager(ResultManagerBase):
    async def save_frame_result(
        self, flight_id: str, result: FrameResult
    ) -> bool:
        raise NotImplementedError

    async def get_frame_result(
        self, flight_id: str, frame_id: int
    ) -> Optional[FrameResult]:
        raise NotImplementedError

    async def get_flight_results(self, flight_id: str) -> FlightResults:
        raise NotImplementedError

    async def update_refined_result(
        self, flight_id: str, result: RefinedFrameResult
    ) -> bool:
        raise NotImplementedError

    async def get_object_gps(
        self,
        flight_id: str,
        frame_id: int,
        pixel: tuple[float, float],
    ) -> GPSPoint:
        raise NotImplementedError

    async def export_results(
        self, flight_id: str, format: str = "json"
    ) -> bytes:
        raise NotImplementedError

    async def get_statistics(self, flight_id: str) -> dict:
        raise NotImplementedError

