"""
统一的医疗报告生成脚本运行器

使用方法：
    # 使用 extract_and_fill_report.py（推荐 - 功能完整）
    python run_report_generation.py --method extract
    
    # 使用 fill_with_docxtpl.py（简单模板填充）
    python run_report_generation.py --method docxtpl
    
    # 强制重新提取（不使用缓存）
    python run_report_generation.py --method extract --force
    
    # 使用DeepSeek分析
    python run_report_generation.py --method extract --deepseek
    
    # 指定DeepSeek API Key
    python run_report_generation.py --method extract --deepseek --api-key YOUR_KEY
"""
import sys
import os
from pathlib import Path
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

def print_config_info(method: str, force: bool, use_deepseek: bool):
    """打印配置信息"""
    print("=" * 70)
    print("  医疗报告生成系统")
    print("=" * 70)
    print(f"  运行方式: {method.upper()}")
    print(f"  强制刷新: {'是' if force else '否（使用缓存）'}")
    print(f"  DeepSeek分析: {'启用 [OK]' if use_deepseek else '关闭'}")
    
    # 检查关键文件
    base_dir = Path(__file__).parent
    template_complete = base_dir / "template_complete.docx"
    template_docxtpl = Path(__file__).parent.parent / "template_docxtpl.docx"
    config_file = base_dir / "abb_mapping_config.json"
    
    print(f"\n  关键文件检查:")
    print(f"    - 模板文件 (extract): {'[OK] 存在' if template_complete.exists() else '[X] 缺失'}")
    print(f"    - 模板文件 (docxtpl): {'[OK] 存在' if template_docxtpl.exists() else '[X] 缺失'}")
    print(f"    - 配置文件: {'[OK] 存在' if config_file.exists() else '[X] 缺失'}")
    
    if use_deepseek:
        deepseek_key = os.environ.get('DEEPSEEK_API_KEY', '')
        print(f"    - DeepSeek API Key: {'[OK] 已配置' if deepseek_key else '[X] 未配置'}")
    
    print("=" * 70)
    print()


def run_extract_method(force: bool, use_deepseek: bool, api_key: str = None):
    """运行 extract_and_fill_report.py 方法"""
    try:
        from extract_and_fill_report import main as extract_main
        extract_main(force_extract=force, use_deepseek=use_deepseek, deepseek_api_key=api_key)
    except ImportError as e:
        print(f"[ERROR] 导入失败: {e}")
        print("   请确保 extract_and_fill_report.py 文件存在")
        sys.exit(1)
    except Exception as e:
        print(f"[ERROR] 运行失败: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


def run_docxtpl_method():
    """运行 fill_with_docxtpl.py 方法"""
    try:
        from fill_with_docxtpl import main as docxtpl_main
        docxtpl_main()
    except ImportError as e:
        print(f"[ERROR] 导入失败: {e}")
        print("   请确保 fill_with_docxtpl.py 文件存在")
        sys.exit(1)
    except Exception as e:
        print(f"[ERROR] 运行失败: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)


def main():
    """主函数"""
    # 解析命令行参数
    method = 'extract'  # 默认方法
    force = False
    use_deepseek = False
    api_key = None
    
    # 解析参数
    args = sys.argv[1:]
    i = 0
    while i < len(args):
        arg = args[i]
        
        if arg in ['--method', '-m']:
            if i + 1 < len(args):
                method = args[i + 1]
                i += 2
            else:
                print("[ERROR] --method 参数需要指定值: extract 或 docxtpl")
                sys.exit(1)
        elif arg in ['--force', '-f']:
            force = True
            i += 1
        elif arg in ['--deepseek', '-d']:
            use_deepseek = True
            i += 1
        elif arg in ['--api-key', '-k']:
            if i + 1 < len(args):
                api_key = args[i + 1]
                i += 2
            else:
                print("[ERROR] --api-key 参数需要指定API Key")
                sys.exit(1)
        elif arg in ['--help', '-h']:
            print(__doc__)
            sys.exit(0)
        else:
            print(f"[ERROR] 未知参数: {arg}")
            print("   使用 --help 查看帮助信息")
            sys.exit(1)
    
    # 如果没有指定API Key，尝试从环境变量获取
    if use_deepseek and not api_key:
        api_key = os.environ.get('DEEPSEEK_API_KEY', '')
        if not api_key:
            print("[WARNING] 使用DeepSeek需要提供API Key")
            print("   方法1: 设置环境变量 DEEPSEEK_API_KEY")
            print("   方法2: 使用参数 --api-key YOUR_KEY")
            sys.exit(1)
    
    # 验证方法
    if method not in ['extract', 'docxtpl']:
        print(f"[ERROR] 未知的方法: {method}")
        print("   支持的方法: extract, docxtpl")
        sys.exit(1)
    
    # 打印配置信息
    print_config_info(method, force, use_deepseek)
    
    # 运行对应的方法
    if method == 'extract':
        run_extract_method(force, use_deepseek, api_key)
    elif method == 'docxtpl':
        if force or use_deepseek:
            print("[WARNING] docxtpl 方法不支持 --force 和 --deepseek 参数，将忽略")
        run_docxtpl_method()
    
    print("\n" + "=" * 70)
    print("[SUCCESS] 脚本执行完成！")
    print("=" * 70)


if __name__ == '__main__':
    main()
