"""Webhook路由 - 企业微信回调"""
from fastapi import APIRouter, Request, Response, Query
from fastapi.responses import PlainTextResponse

from src.integrations.wechat_work import WeChatWorkClient, WeChatWorkMessageHandler

router = APIRouter(prefix="/webhooks")


@router.get("/wechat-work")
async def wechat_work_verify(
    msg_signature: str = Query(...),
    timestamp: str = Query(...),
    nonce: str = Query(...),
    echostr: str = Query(...),
):
    """企业微信URL验证（配置回调时调用）"""
    client = WeChatWorkClient()
    if client.verify_url(msg_signature, timestamp, nonce, echostr):
        return PlainTextResponse(echostr)
    return PlainTextResponse("verify failed", status_code=403)


@router.post("/wechat-work")
async def wechat_work_callback(
    request: Request,
    msg_signature: str = Query(...),
    timestamp: str = Query(...),
    nonce: str = Query(...),
):
    """企业微信消息回调"""
    body = await request.body()
    xml_data = body.decode('utf-8')

    client = WeChatWorkClient()
    handler = WeChatWorkMessageHandler(client)

    # 解析消息
    message = client.parse_message(xml_data)

    # 处理消息
    reply_content = await handler.handle_message(message)

    if reply_content:
        # 构建回复
        reply_xml = client.build_reply(
            to_user=message['from_user_name'],
            from_user=message['to_user_name'],
            content=reply_content
        )
        return Response(content=reply_xml, media_type="application/xml")

    return Response(content="success", media_type="text/plain")
