from typing import Optional
import numpy as np

from .base import SatelliteDataManagerBase
from models.core import GPSPoint
from models.satellite import TileCoords, TileBounds


class SatelliteDataManager(SatelliteDataManagerBase):
    async def get_tile(
        self, gps: GPSPoint, zoom: int
    ) -> Optional[tuple[np.ndarray, TileBounds]]:
        raise NotImplementedError

    async def get_tile_by_coords(
        self, coords: TileCoords
    ) -> Optional[tuple[np.ndarray, TileBounds]]:
        raise NotImplementedError

    async def get_tiles_in_radius(
        self, center: GPSPoint, radius_meters: float, zoom: int
    ) -> list[tuple[np.ndarray, TileBounds]]:
        raise NotImplementedError

    async def get_tile_bounds(self, coords: TileCoords) -> TileBounds:
        raise NotImplementedError

    async def prefetch_area(
        self, nw: GPSPoint, se: GPSPoint, zoom: int
    ) -> int:
        raise NotImplementedError

    def gps_to_tile_coords(self, gps: GPSPoint, zoom: int) -> TileCoords:
        raise NotImplementedError

    def tile_coords_to_gps(self, coords: TileCoords) -> GPSPoint:
        raise NotImplementedError

