#!/usr/bin/env python3
"""
飞书文件发送脚本
通过飞书开放API上传文件并发送
"""

import requests
import json
import os

# 飞书API配置
FEISHU_APP_ID = os.getenv('FEISHU_APP_ID', '')
FEISHU_APP_SECRET = os.getenv('FEISHU_APP_SECRET', '')

# 目标用户（你的飞书open_id）
TARGET_USER = "ou_f15f2ab96b4ac58a445029c08e2647a7"

def get_tenant_access_token():
    """获取tenant_access_token"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    headers = {
        "Content-Type": "application/json"
    }
    data = {
        "app_id": FEISHU_APP_ID,
        "app_secret": FEISHU_APP_SECRET
    }
    
    try:
        response = requests.post(url, headers=headers, json=data)
        result = response.json()
        if result.get('code') == 0:
            return result['tenant_access_token']
        else:
            print(f"获取token失败: {result}")
            return None
    except Exception as e:
        print(f"请求失败: {e}")
        return None

def upload_file(token, file_path, file_type="stream"):
    """上传文件到飞书"""
    url = f"https://open.feishu.cn/open-apis/im/v1/files"
    
    headers = {
        "Authorization": f"Bearer {token}"
    }
    
    file_name = os.path.basename(file_path)
    
    with open(file_path, 'rb') as f:
        files = {
            'file': (file_name, f, 'application/octet-stream')
        }
        data = {
            'file_type': file_type,
            'file_name': file_name
        }
        
        try:
            response = requests.post(url, headers=headers, files=files, data=data)
            result = response.json()
            print(f"上传响应: {result}")
            if result.get('code') == 0:
                return result['data']['file_key']
            else:
                print(f"上传失败: {result}")
                return None
        except Exception as e:
            print(f"上传异常: {e}")
            return None

def send_file_message(token, file_key, file_name):
    """发送文件消息"""
    url = "https://open.feishu.cn/open-apis/message/v4/send"
    
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    data = {
        "user_id": TARGET_USER,
        "msg_type": "file",
        "content": {
            "file_key": file_key,
            "file_name": file_name
        }
    }
    
    try:
        response = requests.post(url, headers=headers, json=data)
        result = response.json()
        print(f"发送响应: {result}")
        if result.get('code') == 0:
            print("✅ 文件发送成功！")
            return True
        else:
            print(f"发送失败: {result}")
            return False
    except Exception as e:
        print(f"发送异常: {e}")
        return False

def main():
    file_path = "/root/.openclaw/workspace/玉米期货投研报告_方正中期_20260311.pptx"
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"❌ 文件不存在: {file_path}")
        return
    
    # 获取token
    token = get_tenant_access_token()
    if not token:
        print("❌ 无法获取访问令牌")
        return
    
    print("✅ 获取token成功")
    
    # 上传文件
    file_key = upload_file(token, file_path)
    if not file_key:
        print("❌ 文件上传失败")
        return
    
    print(f"✅ 文件上传成功，file_key: {file_key}")
    
    # 发送消息
    file_name = os.path.basename(file_path)
    if send_file_message(token, file_key, file_name):
        print("✅ 文件已发送给用户")
    else:
        print("❌ 文件发送失败")

if __name__ == '__main__':
    main()
