"""
测试脚本：运行视频解构

功能：
1. 支持视频输入（视频详情.json）
2. 运行 WhatDeconstructionWorkflow（视频分析版本）
"""

import json
import sys
import os
import argparse
from pathlib import Path
from datetime import datetime

# 添加项目根目录到路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

# 手动加载.env文件
def load_env_file(env_path):
    """手动加载.env文件"""
    if not env_path.exists():
        return False

    with open(env_path, 'r') as f:
        for line in f:
            line = line.strip()
            # 跳过注释和空行
            if not line or line.startswith('#'):
                continue
            # 解析KEY=VALUE
            if '=' in line:
                key, value = line.split('=', 1)
                os.environ[key.strip()] = value.strip()

    return True

env_path = project_root / ".env"
if load_env_file(env_path):
    print(f"✅ 已加载环境变量从: {env_path}")
    # 验证API密钥
    api_key = os.environ.get("GEMINI_API_KEY", "")
    if api_key:
        print(f"   GEMINI_API_KEY: {api_key[:10]}...")
else:
    print(f"⚠️  未找到.env文件: {env_path}")

from src.workflows.what_deconstruction_workflow import WhatDeconstructionWorkflow
from src.utils.logger import get_logger

logger = get_logger(__name__)

def load_test_data(directory):
    """
    加载测试数据（视频格式）

    Args:
        directory: 视频目录名（如"56898272"）
    """
    # 加载视频详情文件
    video_data_path = Path(__file__).parent / directory / "视频详情.json"
    if not video_data_path.exists():
        raise FileNotFoundError(f"未找到视频详情文件：{video_data_path}\n请确保目录下存在'视频详情.json'文件")
    
    with open(video_data_path, "r", encoding="utf-8") as f:
        data = json.load(f)
    
    return data


def convert_to_workflow_input(raw_data):
    """
    将原始数据转换为工作流输入格式（视频分析版本）

    Args:
        raw_data: 原始帖子数据（视频格式）
    """
    # 视频分析版本：直接使用视频URL和文本信息
    input_data = {
        "video": raw_data.get("video", ""),
        "channel_content_id": raw_data.get("channel_content_id", ""),
        "title": raw_data.get("title", ""),
        "body_text": raw_data.get("body_text", ""),
    }

    return input_data


def main():
    """主函数"""
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='运行单个视频的What解构工作流（视频分析版本）')
    parser.add_argument('directory', type=str, help='视频目录名（如"56898272"），目录下需要有"视频详情.json"文件')
    args = parser.parse_args()

    directory = args.directory

    print("=" * 80)
    print(f"开始测试 What 解构工作流（视频分析版本）- 目录: {directory}")
    print("=" * 80)

    # 1. 加载测试数据（目标视频）
    print("\n[1] 加载测试数据（目标视频）...")
    try:
        raw_data = load_test_data(directory)

        print(f"✅ 成功加载测试数据")
        print(f"   - 标题: {raw_data.get('title')}")
        print(f"   - 内容类型: {raw_data.get('content_type', 'unknown')}")
        video_url = raw_data.get('video', '')
        if video_url:
            print(f"   - 视频URL: {video_url[:50]}...")
        else:
            print(f"   - 视频URL: 未提供")
    except Exception as e:
        print(f"❌ 加载测试数据失败: {e}")
        return

    # 2. 转换数据格式
    print("\n[2] 转换数据格式...")
    try:
        input_data = convert_to_workflow_input(raw_data)
        print(f"✅ 数据格式转换成功")
        print(f"   - 视频URL: {input_data.get('video', '')[:50]}...")
        print(f"   - 标题: {input_data.get('title', '')}")
    except Exception as e:
        print(f"❌ 数据格式转换失败: {e}")
        return

    # 3. 初始化工作流
    print("\n[3] 初始化工作流...")
    try:
        workflow = WhatDeconstructionWorkflow(
            model_provider="google_genai",
            max_depth=10
        )
        print(f"✅ 工作流初始化成功")
    except Exception as e:
        print(f"❌ 工作流初始化失败: {e}")
        import traceback
        traceback.print_exc()
        return

    # 4. 执行工作流
    print("\n[4] 执行工作流...")
    print("   注意：这可能需要几分钟时间...")
    try:
        result = workflow.invoke(input_data)
        print(f"✅ 工作流执行成功")
    except Exception as e:
        print(f"❌ 工作流执行失败: {e}")
        import traceback
        traceback.print_exc()
        return

    # 5. 保存结果
    print("\n[5] 保存结果...")
    try:
        # 生成带时间戳的文件名
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        output_filename = f"result_{timestamp}.json"
        output_path = Path(__file__).parent / directory / "output" / output_filename
        output_path.parent.mkdir(parents=True, exist_ok=True)

        with open(output_path, "w", encoding="utf-8") as f:
            json.dump(result, f, ensure_ascii=False, indent=2)

        print(f"✅ 结果已保存到: {output_path}")
        print(f"   文件名: {output_filename}")
    except Exception as e:
        print(f"❌ 保存结果失败: {e}")
        return

    # 6. 显示结果摘要
    print("\n" + "=" * 80)
    print("结果摘要")
    print("=" * 80)

    if result:
        # 1. 视频信息
        topic_selection_v2 = result.get("topic_selection_v2", {})
        if topic_selection_v2:
            print(f"✅ 选题结构分析 V2 完成")
            print(f"   - 选题结构: {topic_selection_v2}")
        else:
            print(f"❌ 选题结构分析 V2 失败")
            return
        


if __name__ == "__main__":
    main()
