from fastapi import APIRouter, Depends, Query, HTTPException
from typing import Optional
from middleware.auth import require_auth
from core import copernicus

"""
api.mebboat.it/marine/...
"""

router = APIRouter(prefix="/catalog", tags=["Copernicus Marine Database"])

@router.get("")
async def list_catalog(
    search: Optional[str] = Query(None, description="Cerca per nome o ID"),
    limit: int = Query(50, ge=1, le=200),
    offset: int = Query(0, ge=0),
    user=Depends(require_auth)
):
    """
    [API] Ottieni una lista di dataset corrispondeti alla query di ricerca, con paginazione. 
    Ogni dataset include ID, titolo, descrizione, variabili, posizione e finestra di tempo.
    I risultati rimangono salvati nella cache del server per un ora.
    """
    try:
        return copernicus.get_catalog(search=search, limit=limit, offset=offset)
    except Exception as e:
        raise HTTPException(status_code=502, detail=f"Catalog unavailable: {str(e)}")


@router.get("/{dataset_id}")
async def get_dataset(
    dataset_id: str,
    user=Depends(require_auth)
):
    """
    [API] Ottieni i dati di un dataset dal catalogo di Copernics Marine.
    """
    try:
        info = copernicus.get_dataset_info(dataset_id)
    except Exception as e:
        raise HTTPException(status_code=502, detail=f"Catalog unavailable: {str(e)}")

    if info is None:
        raise HTTPException(status_code=404, detail=f"Dataset '{dataset_id}' not found in catalog")

    return info
