"""
获取飞书群聊 ID 工具

使用步骤：
1. 确保机器人已加入目标群聊
2. 运行此脚本
3. 在群聊中发送任意消息（@机器人）
4. 脚本会输出群聊 ID
"""

import asyncio
import logging
import sys
from pathlib import Path

# 添加项目路径
sys.path.insert(0, str(Path(__file__).parent.parent.parent))

from agent.tools.builtin.feishu.feishu_client import FeishuClient
from dotenv import load_dotenv
load_dotenv()

from config import FEISHU_APP_ID, FEISHU_APP_SECRET

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def on_message_received(event):
    """消息回调函数"""
    print("\n" + "=" * 60)
    print("📩 收到消息")
    print("=" * 60)
    print(f"群聊 ID (chat_id):    {event.chat_id}")
    print(f"发送者 ID (sender_open_id): {event.sender_open_id}")
    print(f"发送者姓名:           {event.sender_name or '未知'}")
    print(f"消息内容:             {event.content}")
    print(f"聊天类型:             {event.chat_type.value}")
    print("=" * 60)

    if event.chat_type.value == "group":
        print(f"\n✅ 请将以下群聊 ID 配置到 .env 文件：")
        print(f"FEISHU_AD_PROJECT_CHAT_ID={event.chat_id}")
    else:
        print(f"\n⚠️  这是私聊消息，群聊 ID 是 {event.chat_id}")
    print()


def main():
    """启动飞书 WebSocket 监听，等待群聊消息以获取 chat_id"""
    print("=" * 60)
    print("飞书群聊 ID 获取工具")
    print("=" * 60)
    print()
    print("📋 使用说明：")
    print("1. 确保机器人已加入目标群聊")
    print("2. 脚本启动后，在群聊中发送任意消息（建议@机器人）")
    print("3. 脚本会自动输出群聊 ID")
    print()
    print(f"飞书应用 ID: {FEISHU_APP_ID}")
    print()
    print("🚀 启动监听...")
    print("=" * 60)
    print()

    client = FeishuClient(
        app_id=FEISHU_APP_ID,
        app_secret=FEISHU_APP_SECRET
    )

    # 启动 WebSocket 监听（阻塞模式）
    try:
        client.start_websocket(
            on_message=on_message_received,
            blocking=True
        )
    except KeyboardInterrupt:
        print("\n\n✋ 用户中断，退出程序")
    except Exception as e:
        logger.error(f"监听失败: {e}", exc_info=True)
        print(f"\n❌ 启动失败: {e}")
        print("\n请检查：")
        print("  1. FEISHU_APP_ID 和 FEISHU_APP_SECRET 是否正确")
        print("  2. 机器人应用是否已启用事件订阅")
        print("  3. 网络连接是否正常")


if __name__ == "__main__":
    main()
