import uuid

from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession

from app.core.dependencies import get_current_user
from app.core.responses import api_response, normalize_page_param, page_response
from app.db.database import get_async_session
from app.schemas.poste import CommentaireCreate
from app.services.poste_service import PosteService

router = APIRouter(prefix="/postes", tags=["Commentaires"])


@router.post("/{poste_id}/commentaires", status_code=201)
async def ajouter_commentaire(
    poste_id: uuid.UUID,
    body: CommentaireCreate,
    db: AsyncSession = Depends(get_async_session),
    current_user=Depends(get_current_user),
):
    service = PosteService(db)
    data = await service.ajouter_commentaire(str(poste_id), body, current_user)
    return api_response(data, message="Commentaire ajouté", status_code=201)


@router.get("/{poste_id}/commentaires")
async def list_commentaires(
    poste_id: uuid.UUID,
    page: int = 0,
    size: int = 50,
    db: AsyncSession = Depends(get_async_session),
    _current_user=Depends(get_current_user),
):
    resolved_page = normalize_page_param(page)
    service = PosteService(db)
    items, total = await service.list_commentaires(str(poste_id), page=resolved_page, size=size)
    return page_response(items, total=total, page=resolved_page, size=size)


@router.delete("/{poste_id}/commentaires/{commentaire_id}", status_code=204)
async def supprimer_commentaire(
    poste_id: uuid.UUID,
    commentaire_id: uuid.UUID,
    db: AsyncSession = Depends(get_async_session),
    current_user=Depends(get_current_user),
):
    service = PosteService(db)
    await service.supprimer_commentaire(commentaire_id, current_user)
