from models.core import CameraParameters


class GSDCalculator:
    @staticmethod
    def calculate_gsd(
        altitude: float,
        focal_length: float,
        sensor_width: float,
        image_width: int,
    ) -> float:
        raise NotImplementedError

    @staticmethod
    def calculate_footprint(
        altitude: float,
        camera_params: CameraParameters,
    ) -> tuple[float, float]:
        raise NotImplementedError

    @staticmethod
    def altitude_for_gsd(
        target_gsd: float,
        focal_length: float,
        sensor_width: float,
        image_width: int,
    ) -> float:
        raise NotImplementedError

    @staticmethod
    def calculate_coverage_radius(
        altitude: float,
        camera_params: CameraParameters,
    ) -> float:
        raise NotImplementedError

