#!/usr/bin/env python3
"""下载飞书文档中的所有图片"""
import os
import json
import base64
import urllib.request

# 飞书 API 配置
APP_ID = os.environ.get("FEISHU_APP_ID", "")
APP_SECRET = os.environ.get("FEISHU_APP_SECRET", "")

# 输出目录
OUTPUT_DIR = "/home/ubuntu/.openclaw/workspace/.tmp/wechat-publish/claude-code-skills"

# 所有图片 token（从文档中提取）
IMAGE_TOKENS = [
    "Lf80bjAmhouvrVxDxtJcsPrNn9b",
    "Mg0tbERgRop0E7xDn6Uc0Tnzn0d",
    "ICVKbBEKfo3BcRxzY6qcTEAJn7u",
    "JTqAbubbsoC3ikx7yLkcadGmnnc",
    "IIEObBQ1Ro7smSx5qpUcK3fYnCh",
    "Jy1xbL2Glo1o93xTie6cvornngf",
    "IkvBbWh4VoWH2LxytHicA7Q7nad",
    "RlFlbb9BVoLEzdxx7nTc04CZnMh",
    "Ygsgbvs57okTiwxj9AgcRoYFnUc",
    "AKRTb4j6eoS0HMxdNUYcltN2ndb",
    "RtcVbYEUKoCmIHxvyygc128Vnte",
    "Zus3bGm2folhkQx8O5sc1CpNnZg",
    "J1cJblHproYBnuxrNwJcKfKWnFg",
    "InVhb4y4QoKzZRxERducYQNpnLg",
    "APkmbEJDaoLUQnxzcnjcP1Von1b",
    "VXagbDEFOo5F99xDheXcGbB7nDw",
    "NJhGbi3n9oAW8jxJye0cHH0hnTe",
    "MCtjbyovCovNnpxnjJBcHLTMnsd",
    "BHHfbW0kuok3guxBMVKcko1dnGf",
    "BsHvb78BTollZix3jnAc6YU0n3e",
    "QhdTbfTq1o8DHMx8CxVcAVV0n4e",
    "JGDhb54PDoA2atxdD37cBBCAnte",
    "OLKMbAui8ozE4Yx3NYncTLvunjb",
    "XOkmb3XkLoNNf7xVbs0cNusPnnf",
    "FMi4bip1Xo3udwxuKNQcBkbUnze",
    "S79FblSPqonzMtx7y68c8419nYd",
    "CW1mbeIaJoItQaxrztDcWLWPneh",
]

def get_tenant_access_token():
    """获取 tenant access token"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    data = json.dumps({"app_id": APP_ID, "app_secret": APP_SECRET}).encode()
    req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=30) as resp:
        result = json.load(resp)
    return result.get("tenant_access_token", "")

def download_image(token, index, token_header):
    """下载单张图片"""
    url = f"https://open.feishu.cn/open-apis/im/v1/images/{token}"
    req = urllib.request.Request(url, headers={
        "Authorization": f"Bearer {token_header}"
    })
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            # 获取 Content-Type
            content_type = resp.headers.get("Content-Type", "image/png")
            ext = "png"
            if "jpeg" in content_type or "jpg" in content_type:
                ext = "jpg"
            elif "gif" in content_type:
                ext = "gif"
            elif "webp" in content_type:
                ext = "webp"
            
            data = resp.read()
            filename = f"image_{index:02d}.{ext}"
            filepath = os.path.join(OUTPUT_DIR, filename)
            with open(filepath, "wb") as f:
                f.write(data)
            print(f"✅ [{index}] {token} -> {filename} ({len(data)} bytes)")
            return filename
    except Exception as e:
        print(f"❌ [{index}] {token} 失败: {e}")
        return None

def main():
    if not APP_ID or not APP_SECRET:
        print("❌ 缺少 FEISHU_APP_ID 或 FEISHU_APP_SECRET 环境变量")
        return
    
    print("正在获取 access token...")
    token = get_tenant_access_token()
    if not token:
        print("❌ 获取 token 失败")
        return
    print(f"✅ Token 获取成功")
    
    results = {}
    for i, img_token in enumerate(IMAGE_TOKENS, 1):
        filename = download_image(img_token, i, token)
        if filename:
            results[img_token] = filename
    
    # 保存映射
    mapping = {
        "tokens": IMAGE_TOKENS,
        "mapping": results
    }
    with open(os.path.join(OUTPUT_DIR, "token_mapping.json"), "w") as f:
        json.dump(mapping, f, ensure_ascii=False, indent=2)
    
    print(f"\n完成！共下载 {len(results)}/{len(IMAGE_TOKENS)} 张图片")
    print(f"映射文件: {os.path.join(OUTPUT_DIR, 'token_mapping.json')}")

if __name__ == "__main__":
    main()
