# -*- coding: utf-8 -*-
"""
小红书笔记上传器测试脚本

用于测试优化后的图文笔记上传功能
"""

import sys
import os
import asyncio
from pathlib import Path
from datetime import datetime, timedelta

# 添加项目根目录到系统路径
current_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(current_dir)
sys.path.append(project_root)

from conf import BASE_DIR
from uploader.xhs_note_uploader.main import (
    XiaoHongShuImageNote,
    XiaoHongShuVideoNote,
    xiaohongshu_note_setup
)


async def test_image_note_immediate():
    """测试立即发布图文笔记"""
    
    print("\n" + "=" * 60)
    print("【测试1】立即发布图文笔记")
    print("=" * 60)
    
    # Cookie文件路径
    account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
    account_file.parent.mkdir(parents=True, exist_ok=True)
    
    # 检查Cookie
    cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=True)
    if not cookie_valid:
        print("❌ Cookie无效，请重新登录")
        return False
    
    # 准备图片
    image_paths = [
        str(Path(BASE_DIR) / "videos" / "demo.png"),
    ]
    
    # 验证图片存在
    for img_path in image_paths:
        if not os.path.exists(img_path):
            print(f"❌ 图片不存在: {img_path}")
            return False
    
    try:
        # 创建图文笔记
        note = XiaoHongShuImageNote(
            title="测试图文笔记标题✨",
            content="这是一条测试笔记的正文内容～\n\n测试优化后的上传功能！",
            tags=["测试", "笔记"],
            image_paths=image_paths,
            publish_date=0,  # 立即发布
            account_file=str(account_file),
            location="上海市",
            headless=False  # 有头模式，方便观察
        )
        
        # 执行上传
        await note.main()
        
        print("\n✅ 测试1通过：立即发布图文笔记成功")
        return True
        
    except Exception as e:
        print(f"\n❌ 测试1失败: {e}")
        return False


async def test_image_note_scheduled():
    """测试定时发布图文笔记"""
    
    print("\n" + "=" * 60)
    print("【测试2】定时发布图文笔记")
    print("=" * 60)
    
    # Cookie文件路径
    account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
    
    # 检查Cookie
    cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=False)
    if not cookie_valid:
        print("❌ Cookie无效")
        return False
    
    # 准备图片
    image_paths = [
        str(Path(BASE_DIR) / "videos" / "demo.png"),
    ]
    
    # 设置发布时间（2小时后）
    publish_time = datetime.now() + timedelta(hours=2)
    publish_time = publish_time.replace(second=0, microsecond=0)
    
    try:
        # 创建图文笔记
        note = XiaoHongShuImageNote(
            title="定时发布测试笔记⏰",
            content="这是一条定时发布的测试笔记～\n\n将在2小时后发布！",
            tags=["定时发布", "测试"],
            image_paths=image_paths,
            publish_date=publish_time,
            account_file=str(account_file),
            headless=False
        )
        
        # 执行上传
        await note.main()
        
        print(f"\n✅ 测试2通过：定时发布设置成功（发布时间：{publish_time}）")
        return True
        
    except Exception as e:
        print(f"\n❌ 测试2失败: {e}")
        return False


async def test_video_note():
    """测试视频笔记上传"""
    
    print("\n" + "=" * 60)
    print("【测试3】视频笔记上传")
    print("=" * 60)
    
    # Cookie文件路径
    account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
    
    # 检查Cookie
    cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=False)
    if not cookie_valid:
        print("❌ Cookie无效")
        return False
    
    # 准备视频
    video_path = str(Path(BASE_DIR) / "videos" / "demo.mp4")
    
    if not os.path.exists(video_path):
        print(f"❌ 视频不存在: {video_path}")
        return False
    
    try:
        # 创建视频笔记
        note = XiaoHongShuVideoNote(
            title="测试视频笔记🎬",
            content="这是一条测试视频笔记的正文内容～\n\n测试优化后的视频上传功能！",
            tags=["视频测试", "笔记"],
            video_path=video_path,
            publish_date=0,  # 立即发布
            account_file=str(account_file),
            headless=False
        )
        
        # 执行上传
        await note.main()
        
        print("\n✅ 测试3通过：视频笔记上传成功")
        return True
        
    except Exception as e:
        print(f"\n❌ 测试3失败: {e}")
        return False


async def run_all_tests():
    """运行所有测试"""
    
    print("\n" + "=" * 60)
    print("小红书笔记上传器 - 完整测试")
    print("=" * 60)
    
    results = []
    
    # 测试1：立即发布图文笔记
    result1 = await test_image_note_immediate()
    results.append(("立即发布图文笔记", result1))
    
    if result1:
        # 等待一段时间再继续测试（避免频繁操作）
        print("\n⏰ 等待30秒后继续下一个测试...")
        await asyncio.sleep(30)
    
    # 测试2：定时发布图文笔记
    # result2 = await test_image_note_scheduled()
    # results.append(("定时发布图文笔记", result2))
    
    # if result2:
    #     print("\n⏰ 等待30秒后继续下一个测试...")
    #     await asyncio.sleep(30)
    
    # 测试3：视频笔记上传
    # result3 = await test_video_note()
    # results.append(("视频笔记上传", result3))
    
    # 打印测试结果
    print("\n" + "=" * 60)
    print("测试结果汇总")
    print("=" * 60)
    
    for test_name, result in results:
        status = "✅ 通过" if result else "❌ 失败"
        print(f"{status} - {test_name}")
    
    passed = sum(1 for _, r in results if r)
    total = len(results)
    
    print(f"\n总计：{passed}/{total} 个测试通过")
    
    if passed == total:
        print("\n🎉 所有测试通过！")
    else:
        print("\n⚠️  部分测试失败，请检查错误信息")


if __name__ == "__main__":
    # 运行所有测试
    asyncio.run(run_all_tests())
    
    # 如果只想运行单个测试，注释掉上面一行，取消下面的注释：
    # asyncio.run(test_image_note_immediate())
    # asyncio.run(test_image_note_scheduled())
    # asyncio.run(test_video_note())

