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
from app.db.database import get_async_session
from app.schemas.poste import ReactionCreate
from app.services.poste_service import PosteService

router = APIRouter(prefix="/postes", tags=["Réactions"])


@router.post("/{poste_id}/reactions", status_code=201)
async def ajouter_reaction(
    poste_id: uuid.UUID,
    body: ReactionCreate,
    db: AsyncSession = Depends(get_async_session),
    current_user=Depends(get_current_user),
):
    service = PosteService(db)
    data = await service.ajouter_reaction(str(poste_id), body, current_user)
    return api_response(data, message="Réaction ajoutée", status_code=201)


@router.get("/{poste_id}/reactions")
async def list_reactions(
    poste_id: uuid.UUID,
    db: AsyncSession = Depends(get_async_session),
    _current_user=Depends(get_current_user),
):
    service = PosteService(db)
    data = await service.list_reactions(str(poste_id))
    return api_response(data, message="Réactions récupérées")


@router.delete("/{poste_id}/reactions/{reaction_id}", status_code=204)
async def supprimer_reaction(
    poste_id: uuid.UUID,
    reaction_id: uuid.UUID,
    db: AsyncSession = Depends(get_async_session),
    current_user=Depends(get_current_user),
):
    service = PosteService(db)
    await service.supprimer_reaction(reaction_id, current_user)
