from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy.ext.asyncio import AsyncSession

from src.core.database import get_db
from src.core.auth import require_enterprise_or_front
from src.core.api_responses import (
    build_success_payload,
    SuccessResponse,
    ErrorResponse,
    to_schema_dict,
)
from src.services.palavras import PalavrasService
from src.schemas.palavras import PalavraCreate, PalavraResponse
from src.crud.palavras import crud as palavras_crud

router = APIRouter(prefix="/palavras", tags=["Palavras"])

@router.get(
    "/buscar",
    summary="Listar palavras-chave",
    response_model=SuccessResponse,
    responses={
        200: {"description": "Lista de palavras"},
        500: {"description": "Erro interno"},
    },
)
async def listar_palavras(
    palavra: Optional[str] = Query(
        None,
        description="Filtro por palavra (contém)",
    ),
    db: AsyncSession = Depends(get_db),
    _auth=Depends(require_enterprise_or_front),
):
    items = await PalavrasService.listar(db, palavra=palavra)
    data = [to_schema_dict(PalavraResponse, x) for x in items]
    qtd = len(data)
    if qtd == 0:
        message = "Nenhuma palavra encontrada"
    elif qtd == 1:
        message = "1 palavra encontrada"
    else:
        message = f"{qtd} palavras encontradas"
    return build_success_payload(data=data, message=message)
