import logging from typing import Dict, Any, Optional from fastapi import APIRouter, HTTPException, Query from pydantic import BaseModel, Field from services.supabase_service import save_shelter, get_shelters_in_bbox logger = logging.getLogger("api_shelters") router = APIRouter() class ShelterCreateSchema(BaseModel): name: str = Field(..., example="Refugio Escuela Miguel Otero Silva") capacity: int = Field(..., ge=0) occupancy: int = Field(0, ge=0) latitude: float = Field(...) longitude: float = Field(...) resources: Optional[Dict[str, Any]] = Field(default_factory=dict) @router.get("/bbox") def get_shelters_in_view( min_lat: float = Query(...), min_lng: float = Query(...), max_lat: float = Query(...), max_lng: float = Query(...) ): """ Fetches shelters within the visible map bounding box. """ try: shelters = get_shelters_in_bbox(min_lat, min_lng, max_lat, max_lng) return shelters except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/create") def create_shelter(shelter: ShelterCreateSchema): """ Creates a new shelter. """ try: saved = save_shelter( name=shelter.name, capacity=shelter.capacity, occupancy=shelter.occupancy, latitude=shelter.latitude, longitude=shelter.longitude, resources=shelter.resources or {} ) return {"success": True, "shelter": saved} except Exception as e: logger.error(f"Error creating shelter: {e}") raise HTTPException(status_code=500, detail=str(e))