"""MCP Server para envio de notificações ao Google Chat via Webhooks."""

import logging
import os

from mcp.server.fastmcp import FastMCP

from pack_mcp_google_chat_notification.client import build_card_payload, build_text_payload, get_client
from pack_mcp_google_chat_notification.errors import handle_error

log_level = os.environ.get("LOG_LEVEL", "WARNING").upper()
logging.basicConfig(level=getattr(logging, log_level, logging.WARNING))

mcp = FastMCP("pack-mcp-google-chat-notification")


@mcp.tool()
@handle_error
async def send_message(text: str, webhook_url: str | None = None) -> dict:
    """Envia mensagem de texto simples para o Google Chat."""
    if not text:
        raise ValueError("O texto da mensagem é obrigatório")
    client = get_client()
    url = client.resolve_webhook_url(webhook_url)
    client.validate_webhook_url(url)
    payload = build_text_payload(text)
    await client.post(url, payload)
    return {"success": True}


@mcp.tool()
@handle_error
async def send_card(
    title: str,
    sections: list[dict],
    subtitle: str | None = None,
    webhook_url: str | None = None,
) -> dict:
    """Envia mensagem com Card V2 para o Google Chat."""
    if not title:
        raise ValueError("O título do card é obrigatório")
    if not sections:
        raise ValueError("Pelo menos uma seção é obrigatória")
    client = get_client()
    url = client.resolve_webhook_url(webhook_url)
    client.validate_webhook_url(url)
    payload = build_card_payload(title, sections, subtitle=subtitle)
    await client.post(url, payload)
    return {"success": True}

@mcp.tool()
@handle_error
async def send_thread_message(
    text: str,
    thread_key: str,
    webhook_url: str | None = None,
) -> dict:
    """Envia mensagem em thread no Google Chat."""
    if not text:
        raise ValueError("O texto da mensagem é obrigatório")
    if not thread_key:
        raise ValueError("A chave da thread é obrigatória")
    client = get_client()
    url = client.resolve_webhook_url(webhook_url)
    client.validate_webhook_url(url)
    payload = build_text_payload(text)
    thread_params = {
        "threadKey": thread_key,
        "messageReplyOption": "REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD",
    }
    await client.post(url, payload, params=thread_params)
    return {"success": True, "thread_key": thread_key}


def main():
    mcp.run(transport="stdio")
