#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
完整诊断脚本 - 检查所有可能的问题
"""

import sys
import os
import json

def test_all():
    """测试所有组件"""

    print("="*60)
    print("  完整系统诊断")
    print("="*60)
    print()

    # 测试 1: Python 版本
    print("[1/6] Python 版本")
    print(f"  版本: {sys.version}")
    print(f"  ✅ Python 3.8+ 检查: {sys.version_info >= (3, 8)}")
    print()

    # 测试 2: 导入必需模块
    print("[2/6] 导入必需模块")
    modules = {
        'openpyxl': 'openpyxl',
        'requests': 'requests',
        'playwright': 'playwright',
        'ctypes': 'ctypes',
        'getpass': 'getpass'
    }

    for module_name, package_name in modules.items():
        try:
            __import__(module_name)
            print(f"  ✅ {module_name}")
        except ImportError:
            print(f"  ❌ {module_name} - 未安装")
            print(f"     运行: pip install {package_name}")
    print()

    # 测试 3: Playwright 浏览器
    print("[3/6] Playwright 浏览器")
    try:
        from playwright.sync_api import sync_playwright
        print(f"  ✅ Playwright 模块已安装")

        # 检查浏览器
        import subprocess
        result = subprocess.run(
            ["playwright", "show-browsers"],
            capture_output=True,
            text=True,
            timeout=10
        )
        if "chromium" in result.stdout.lower():
            print(f"  ✅ Chromium 浏览器已安装")
        else:
            print(f"  ⚠ Chromium 可能未安装")
            print(f"     运行: playwright install chromium")
    except Exception as e:
        print(f"  ❌ Playwright 检查失败: {e}")
    print()

    # 测试 4: 配置文件
    print("[4/6] 配置文件")
    if not os.path.exists("config.json"):
        print(f"  ❌ config.json 不存在")
        print(f"     运行: python mdp_termination.py --config")
        return False

    try:
        with open("config.json", 'r', encoding='utf-8') as f:
            config = json.load(f)

        required = ['crm_url', 'ad_domain', 'crm_username', 'password_file']
        for field in required:
            if field in config and config[field]:
                print(f"  ✅ {field}: {config[field]}")
            else:
                print(f"  ❌ {field}: 缺失或为空")
                return False
    except Exception as e:
        print(f"  ❌ 配置文件错误: {e}")
        return False
    print()

    # 测试 5: 密码解密
    print("[5/6] 密码解密")
    try:
        # 尝试导入主程序
        import importlib.util
        spec = importlib.util.spec_from_file_location("mdp_termination", "mdp_termination.py")
        mdp = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(mdp)

        password_file = config.get('password_file', 'password.enc')
        password = mdp.PasswordManager.decrypt_password(password_file)
        print(f"  ✅ 密码解密成功")
        print(f"     密码长度: {len(password)} 字符")
    except Exception as e:
        print(f"  ❌ 密码解密失败: {e}")
        import traceback
        traceback.print_exc()
        return False
    print()

    # 测试 6: 尝试实际运行（使用 what-if）
    print("[6/6] 实际运行测试")
    print("  运行: python mdp_termination.py --employee-id 000 --what-if")
    try:
        result = subprocess.run(
            [sys.executable, "mdp_termination.py", "--employee-id", "000", "--what-if"],
            capture_output=True,
            text=True,
            timeout=30,
            encoding='utf-8',
            errors='replace'
        )

        print(f"  返回码: {result.returncode}")
        print(f"\n  标准输出:")
        for line in result.stdout.split('\n')[:20]:
            if line.strip():
                print(f"    {line}")

        if result.stderr:
            print(f"\n  标准错误:")
            for line in result.stderr.split('\n')[:20]:
                if line.strip():
                    print(f"    {line}")

        if result.returncode == 0:
            print(f"\n  ✅ 程序运行成功")
        else:
            print(f"\n  ⚠ 程序返回错误码: {result.returncode}")

    except subprocess.TimeoutExpired:
        print(f"  ❌ 程序超时（可能卡住）")
    except Exception as e:
        print(f"  ❌ 运行测试失败: {e}")
        import traceback
        traceback.print_exc()

    print()
    print("="*60)
    print("  诊断完成")
    print("="*60)

if __name__ == "__main__":
    try:
        test_all()
    except Exception as e:
        print(f"\n错误: {e}")
        import traceback
        traceback.print_exc()
