from typing import Optional
import numpy as np

from .base import ImageRotationManagerBase
from models.processing import RotationResult
from models.flight import HeadingRecord


class ImageRotationManager(ImageRotationManagerBase):
    async def estimate_rotation(
        self, uav_image: np.ndarray, satellite_image: np.ndarray
    ) -> RotationResult:
        raise NotImplementedError

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

    async def update_heading_history(
        self, flight_id: str, record: HeadingRecord
    ) -> None:
        raise NotImplementedError

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

    async def is_sharp_turn(
        self, flight_id: str, current_heading: float
    ) -> bool:
        raise NotImplementedError

    def rotate_image(self, image: np.ndarray, angle: float) -> np.ndarray:
        raise NotImplementedError

