from typing import Annotated

from fastapi import APIRouter, Depends

from app.dependencies import get_camera_service, require_auth
from app.schemas.camera import Camera, CameraDetail, LiveStream
from app.services.camera_service import CameraService

router = APIRouter(prefix="/api", tags=["Cameras"], dependencies=[Depends(require_auth)])


@router.get("/cameras", response_model=list[Camera], summary="List configured cameras")
async def list_cameras(camera_service: Annotated[CameraService, Depends(get_camera_service)]) -> list[Camera]:
    return await camera_service.list_cameras()


@router.get("/cameras/{camera_id}", response_model=CameraDetail, summary="Get camera details")
async def get_camera(
    camera_id: int,
    camera_service: Annotated[CameraService, Depends(get_camera_service)],
) -> CameraDetail:
    return await camera_service.get_camera(camera_id)


@router.get("/live-streams", response_model=list[LiveStream], summary="List live stream metadata")
async def list_live_streams(camera_service: Annotated[CameraService, Depends(get_camera_service)]) -> list[LiveStream]:
    return await camera_service.list_live_streams()
