#!/usr/bin/env python3
"""
获取飞书用户信息
"""

import requests
import json

# 飞书配置
app_id = "cli_a94e174db1785bde"
app_secret = "ly7LKuVeUTmllItRKipfbfxKrbpgrAwX"

def get_access_token():
    """获取访问令牌"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    headers = {"Content-Type": "application/json; charset=utf-8"}
    data = {
        "app_id": app_id,
        "app_secret": app_secret
    }
    
    try:
        response = requests.post(url, headers=headers, json=data, timeout=10)
        if response.status_code == 200:
            result = response.json()
            if result.get("code") == 0:
                return result.get("tenant_access_token")
    except Exception as e:
        print(f"获取令牌失败: {e}")
    
    return None

def get_user_info(access_token, user_id):
    """获取用户信息"""
    # 尝试不同ID格式
    id_types = ["open_id", "user_id", "union_id", "email"]
    
    for id_type in id_types:
        url = f"https://open.feishu.cn/open-apis/contact/v3/users/{user_id}"
        params = {"user_id_type": id_type}
        headers = {
            "Authorization": f"Bearer {access_token}",
            "Content-Type": "application/json"
        }
        
        try:
            response = requests.get(url, params=params, headers=headers, timeout=10)
            if response.status_code == 200:
                result = response.json()
                if result.get("code") == 0:
                    print(f"✅ 使用 {id_type} 找到用户:")
                    print(json.dumps(result.get("data", {}), indent=2, ensure_ascii=False))
                    return result.get("data", {})
        except Exception as e:
            continue
    
    return None

def list_users(access_token):
    """列出用户"""
    url = "https://open.feishu.cn/open-apis/contact/v3/users"
    params = {"page_size": 50}
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }
    
    try:
        response = requests.get(url, params=params, headers=headers, timeout=10)
        if response.status_code == 200:
            result = response.json()
            if result.get("code") == 0:
                users = result.get("data", {}).get("items", [])
                print(f"找到 {len(users)} 个用户:")
                for user in users[:5]:  # 显示前5个
                    print(f"  • {user.get('name')}: open_id={user.get('open_id')}, user_id={user.get('user_id')}")
                return users
    except Exception as e:
        print(f"列出用户失败: {e}")
    
    return []

def main():
    print("获取飞书用户信息...")
    
    # 获取访问令牌
    access_token = get_access_token()
    if not access_token:
        print("❌ 无法获取访问令牌")
        return
    
    print(f"✅ 访问令牌获取成功")
    
    # 列出用户
    print("\n列出用户...")
    users = list_users(access_token)
    
    # 尝试查找特定用户
    print("\n尝试查找用户 ou_499a5c731212b08e951a441a2bc8a82c ...")
    user_info = get_user_info(access_token, "ou_499a5c731212b08e951a441a2bc8a82c")
    
    if not user_info:
        print("❌ 未找到用户，可能需要使用open_id")
        
        # 如果有用户列表，使用第一个用户的open_id测试
        if users:
            test_user = users[0]
            test_open_id = test_user.get('open_id')
            print(f"\n使用测试用户: {test_user.get('name')} (open_id: {test_open_id})")
            
            # 测试发送消息
            test_send_message(access_token, test_open_id)

def test_send_message(access_token, open_id):
    """测试发送消息"""
    print(f"\n测试发送消息给 open_id: {open_id}")
    
    url = "https://open.feishu.cn/open-apis/im/v1/messages"
    params = {"receive_id_type": "open_id"}
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json; charset=utf-8"
    }
    
    data = {
        "receive_id": open_id,
        "msg_type": "text",
        "content": json.dumps({"text": "测试消息：情报大师飞书推送功能测试"}, ensure_ascii=False)
    }
    
    try:
        response = requests.post(url, params=params, headers=headers, json=data, timeout=10)
        if response.status_code == 200:
            result = response.json()
            if result.get("code") == 0:
                print("✅ 测试消息发送成功！")
                return True
            else:
                print(f"❌ 消息发送失败: {result}")
        else:
            print(f"❌ 请求失败: {response.status_code}")
    except Exception as e:
        print(f"❌ 发送异常: {e}")
    
    return False

if __name__ == "__main__":
    print("="*60)
    print("飞书用户信息获取工具")
    print("="*60)
    main()