import numpy as np

from .base import MetricRefinementBase
from models.core import GPSPoint
from models.processing import AlignmentResult


class MetricRefinement(MetricRefinementBase):
    async def refine_alignment(
        self,
        uav_image: np.ndarray,
        satellite_image: np.ndarray,
        initial_homography: np.ndarray,
    ) -> AlignmentResult:
        raise NotImplementedError

    async def compute_precise_gps(
        self,
        uav_center_pixel: tuple[float, float],
        homography: np.ndarray,
        tile_bounds: dict,
    ) -> GPSPoint:
        raise NotImplementedError

    async def estimate_reprojection_error(
        self,
        correspondences: np.ndarray,
        homography: np.ndarray,
    ) -> float:
        raise NotImplementedError

    async def filter_outliers(
        self,
        correspondences: np.ndarray,
        homography: np.ndarray,
        threshold: float = 3.0,
    ) -> np.ndarray:
        raise NotImplementedError

