"""Fase 3 — API Tools: Alertas / Notificações (v2)"""
import json
from mcp.server.fastmcp import FastMCP
from http_client import fluig_get, fluig_post, fluig_put, fluig_delete


def register(mcp: FastMCP):

    @mcp.tool()
    async def fluig_alerta_listar(
        pagina: int = 0,
        tamanho: int = 20,
    ) -> str:
        """
        Lista os alertas/notificações do usuário autenticado.

        Args:
            pagina: Página de resultados.
            tamanho: Alertas por página.
        """
        return await fluig_get(
            "/api/v2/alerts",
            params={"page": pagina, "pageSize": tamanho},
        )

    @mcp.tool()
    async def fluig_alerta_nao_lidos() -> str:
        """Retorna a contagem de alertas não lidos do usuário autenticado."""
        return await fluig_get("/api/v2/alerts/unread/count")

    @mcp.tool()
    async def fluig_alerta_marcar_lido(alerta_id: int) -> str:
        """
        Marca um alerta específico como lido.

        Args:
            alerta_id: ID do alerta.
        """
        return await fluig_put(f"/api/v2/alerts/{alerta_id}/read")

    @mcp.tool()
    async def fluig_alerta_marcar_todos_lidos() -> str:
        """Marca todos os alertas do usuário autenticado como lidos."""
        return await fluig_put("/api/v2/alerts/read-all")

    @mcp.tool()
    async def fluig_alerta_criar(
        login_destino: str,
        assunto: str,
        mensagem: str,
        url_acao: str = "",
    ) -> str:
        """
        Envia um alerta/notificação para um usuário.

        Args:
            login_destino: Login do usuário destinatário. Ex: 'joao.silva'.
            assunto: Assunto/título do alerta.
            mensagem: Corpo da mensagem.
            url_acao: URL opcional para redirecionar ao clicar no alerta.
        """
        body: dict = {
            "userId": login_destino,
            "subject": assunto,
            "message": mensagem,
        }
        if url_acao:
            body["actionUrl"] = url_acao
        return await fluig_post("/api/v2/alerts", body)

    @mcp.tool()
    async def fluig_alerta_excluir(alerta_id: int) -> str:
        """
        Remove um alerta específico.

        Args:
            alerta_id: ID do alerta a remover.
        """
        return await fluig_delete(f"/api/v2/alerts/{alerta_id}")
