"""Fase 3 — API Tools: Busca Global"""
from urllib.parse import quote as urlquote
from mcp.server.fastmcp import FastMCP
from http_client import fluig_get


def register(mcp: FastMCP):

    @mcp.tool()
    async def fluig_buscar(
        termo: str,
        pagina: int = 0,
        tamanho: int = 20,
    ) -> str:
        """
        Busca unificada no Fluig — retorna documentos, processos e usuarios.

        Args:
            termo: Texto a buscar.
            pagina: Pagina de resultados.
            tamanho: Itens por pagina.
        """
        safe_term = urlquote(str(termo), safe="")
        return await fluig_get(
            "/api/public/2.0/search",
            params={"query": safe_term, "page": pagina, "pageSize": tamanho},
        )

    @mcp.tool()
    async def fluig_buscar_documentos(
        termo: str,
        pasta_id: int = 0,
        pagina: int = 0,
        tamanho: int = 20,
    ) -> str:
        """
        Busca documentos no GED pelo nome ou conteudo.

        Args:
            termo: Texto a buscar nos documentos.
            pasta_id: ID da pasta para restringir a busca (0 = todas as pastas).
            pagina: Pagina de resultados.
            tamanho: Documentos por pagina.
        """
        params: dict = {"query": termo, "page": pagina, "pageSize": tamanho}
        if pasta_id:
            params["folderId"] = pasta_id
        return await fluig_get("/api/public/ecm/document/search", params)

    @mcp.tool()
    async def fluig_buscar_processos(
        termo: str,
        pagina: int = 0,
        tamanho: int = 20,
    ) -> str:
        """
        Busca instancias de processo pelo numero, descricao ou campos do formulario.

        Args:
            termo: Texto a buscar nas instancias.
            pagina: Pagina de resultados.
            tamanho: Instancias por pagina.
        """
        return await fluig_get(
            "/api/v2/processes/search",
            params={"query": termo, "page": pagina, "pageSize": tamanho},
        )

    @mcp.tool()
    async def fluig_buscar_usuarios(
        termo: str,
        pagina: int = 0,
        tamanho: int = 20,
    ) -> str:
        """
        Busca usuarios pelo nome, login ou e-mail.

        Args:
            termo: Texto a buscar.
            pagina: Pagina de resultados.
            tamanho: Usuarios por pagina.
        """
        return await fluig_get(
            "/api/v1/users/search",
            params={"query": termo, "page": pagina, "pageSize": tamanho},
        )
