from typing import Optional

from .base import RouteChunkManagerBase
from models.chunks import ChunkHandle, ChunkBounds, Sim3Transform
from models.core import GPSPoint
from models.processing import ChunkAlignmentResult


class RouteChunkManager(RouteChunkManagerBase):
    async def create_chunk(
        self, flight_id: str, start_frame_id: int
    ) -> ChunkHandle:
        raise NotImplementedError

    async def add_frame_to_chunk(
        self, chunk_id: str, frame_id: int
    ) -> bool:
        raise NotImplementedError

    async def finalize_chunk(self, chunk_id: str) -> bool:
        raise NotImplementedError

    async def get_chunk(self, chunk_id: str) -> Optional[ChunkHandle]:
        raise NotImplementedError

    async def get_active_chunk(
        self, flight_id: str
    ) -> Optional[ChunkHandle]:
        raise NotImplementedError

    async def get_flight_chunks(
        self, flight_id: str
    ) -> list[ChunkHandle]:
        raise NotImplementedError

    async def estimate_chunk_bounds(
        self, chunk_id: str
    ) -> ChunkBounds:
        raise NotImplementedError

    async def anchor_chunk(
        self, chunk_id: str, frame_id: int, gps: GPSPoint
    ) -> bool:
        raise NotImplementedError

    async def match_chunk_to_satellite(
        self, chunk_id: str
    ) -> Optional[ChunkAlignmentResult]:
        raise NotImplementedError

    async def apply_transform_to_chunk(
        self, chunk_id: str, transform: Sim3Transform
    ) -> bool:
        raise NotImplementedError

