"""Availability routes for admin to manage booking availability.""" from datetime import date from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from auth import require_permission from database import get_db from models import Permission, User from schemas import ( AvailabilityDay, AvailabilityResponse, CopyAvailabilityRequest, SetAvailabilityRequest, ) from services.availability import AvailabilityService router = APIRouter(prefix="/api/admin/availability", tags=["availability"]) @router.get("", response_model=AvailabilityResponse) async def get_availability( from_date: date = Query(..., alias="from", description="Start date (inclusive)"), to_date: date = Query(..., alias="to", description="End date (inclusive)"), db: AsyncSession = Depends(get_db), _current_user: User = Depends(require_permission(Permission.MANAGE_AVAILABILITY)), ) -> AvailabilityResponse: """Get availability slots for a date range.""" service = AvailabilityService(db) return await service.get_availability_for_range(from_date, to_date) @router.put("", response_model=AvailabilityDay) async def set_availability( request: SetAvailabilityRequest, db: AsyncSession = Depends(get_db), _current_user: User = Depends(require_permission(Permission.MANAGE_AVAILABILITY)), ) -> AvailabilityDay: """Set availability for a specific date. Replaces any existing availability.""" service = AvailabilityService(db) return await service.set_availability_for_date(request.date, request.slots) @router.post("/copy", response_model=AvailabilityResponse) async def copy_availability( request: CopyAvailabilityRequest, db: AsyncSession = Depends(get_db), _current_user: User = Depends(require_permission(Permission.MANAGE_AVAILABILITY)), ) -> AvailabilityResponse: """Copy availability from one day to multiple target days.""" service = AvailabilityService(db) return await service.copy_availability(request.source_date, request.target_dates)