#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
获取小红书登录二维码并发送给用户扫码

功能：
1. 访问小红书登录页获取二维码
2. 截取二维码区域
3. 转换为 base64 编码
4. 输出 base64 字符串（可直接发送给飞书/微信）
"""

import json
import base64
import time
from pathlib import Path
from playwright.sync_api import sync_playwright

# 输出目录
OUTPUT_DIR = Path(__file__).parent / "data"
OUTPUT_DIR.mkdir(exist_ok=True)
QR_IMAGE_PATH = OUTPUT_DIR / "xiaohongshu_login_qr.png"
QR_BASE64_PATH = OUTPUT_DIR / "xiaohongshu_login_qr_base64.txt"


def get_login_qr_base64():
    """获取登录二维码并返回 base64"""
    print("=" * 70)
    print("小红书登录二维码生成工具", flush=True)
    print("=" * 70, flush=True)
    
    with sync_playwright() as p:
        browser = p.chromium.launch(
            headless=True,
            executable_path='/usr/bin/google-chrome',
            args=['--disable-blink-features=AutomationControlled']
        )
        
        context = browser.new_context()
        page = context.new_page()
        
        # 访问小红书登录页
        print("\n[1/4] 访问小红书登录页...", flush=True)
        page.goto('https://www.xiaohongshu.com/login', wait_until='domcontentloaded', timeout=60000)
        page.wait_for_timeout(5000)
        
        # 截取整个页面
        print("[2/4] 截取二维码...", flush=True)
        page.screenshot(path=str(QR_IMAGE_PATH), full_page=False)
        
        # 读取图片并转换为 base64
        print("[3/4] 转换为 base64 编码...", flush=True)
        with open(QR_IMAGE_PATH, 'rb') as f:
            image_data = base64.b64encode(f.read()).decode('utf-8')
        
        # 保存 base64 到文件
        with open(QR_BASE64_PATH, 'w', encoding='utf-8') as f:
            f.write(image_data)
        
        browser.close()
        
        print("[4/4] 完成！", flush=True)
        print(f"\n✓ 二维码图片：{QR_IMAGE_PATH}")
        print(f"✓ Base64 文件：{QR_BASE64_PATH}")
        print(f"✓ 图片大小：{len(image_data)} bytes")
        
        return image_data


def send_to_feishu(base64_data):
    """发送二维码到飞书（可选）"""
    print("\n如需发送到飞书，请使用以下命令：")
    print(f"  message send --target=<chat_id> --buffer='{base64_data[:50]}...' --filename='xiaohongshu_qr.png'")
    print("\n或者手动发送文件：")
    print(f"  {QR_IMAGE_PATH}")


def main():
    try:
        base64_data = get_login_qr_base64()
        
        print("\n" + "=" * 70, flush=True)
        print("📱 使用说明", flush=True)
        print("=" * 70, flush=True)
        print("\n1. 打开小红书 App")
        print("2. 扫描上方二维码（或查看发送的图片）")
        print("3. 确认登录")
        print("4. 登录后 cookies 会自动保存")
        
        print("\n" + "=" * 70, flush=True)
        print("⏰ 等待扫码（60 秒超时）...", flush=True)
        print("=" * 70, flush=True)
        
        # 等待用户扫码（最长 60 秒）
        for i in range(60):
            time.sleep(1)
            if i % 10 == 0:
                print(f"  等待中... {i}s", flush=True)
        
        print("\n⚠️ 超时未扫码，或登录成功（需手动验证）")
        
        # 输出 base64 数据（前 100 字符用于确认）
        print(f"\nBase64 数据（前 100 字符）：{base64_data[:100]}...")
        print(f"完整数据已保存到：{QR_BASE64_PATH}")
        
        return 0
        
    except Exception as e:
        print(f"\n❌ 错误：{e}", flush=True)
        return 1


if __name__ == "__main__":
    exit(main())
