from typing import Optional
import numpy as np

from .base import FlightProcessingEngineBase
from models.images import ImageData
from models.results import FrameResult
from models.processing import RelativePose
from models.recovery import UserAnchor


class FlightProcessingEngine(FlightProcessingEngineBase):
    async def process_frame(
        self, flight_id: str, image: ImageData
    ) -> Optional[FrameResult]:
        raise NotImplementedError

    async def get_relative_pose(
        self, prev_image: np.ndarray, curr_image: np.ndarray
    ) -> RelativePose:
        raise NotImplementedError

    async def apply_user_anchor(
        self, flight_id: str, frame_id: int, anchor: UserAnchor
    ) -> bool:
        raise NotImplementedError

    async def is_blocked(self, flight_id: str) -> bool:
        raise NotImplementedError

    async def resume_processing(self, flight_id: str) -> bool:
        raise NotImplementedError

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

