#!/usr/bin/env python3
"""
简化的测试：验证移除降级逻辑的效果
"""

import sys
from pathlib import Path

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

def test_basic_functionality():
    """测试基本功能"""
    print("🎯 测试基本功能")
    print("=" * 50)
    
    try:
        # 检查PySceneDetect
        try:
            import scenedetect
            print(f"✅ PySceneDetect {scenedetect.__version__} 可用")
        except ImportError:
            print("❌ PySceneDetect不可用，这会导致明确的错误")
            return True  # 这是预期的行为
        
        # 测试导入
        from python_core.services.video_splitter import VideoSplitterService, DetectionConfig, DetectorType
        print("✅ 模块导入成功")
        
        # 测试服务创建
        service = VideoSplitterService()
        print("✅ 服务创建成功")
        
        # 查找测试视频
        assets_dir = project_root / "assets"
        video_files = list(assets_dir.rglob("*.mp4"))
        
        if not video_files:
            print("⚠️ 没有找到测试视频，跳过视频分析测试")
            return True
        
        test_video = str(video_files[0])
        print(f"📹 测试视频: {test_video}")
        
        # 测试视频分析
        config = DetectionConfig(threshold=30.0, detector_type=DetectorType.CONTENT)
        result = service.analyze_video(test_video, config)
        
        if result.success:
            print(f"✅ 视频分析成功:")
            print(f"   总场景数: {result.total_scenes}")
            print(f"   总时长: {result.total_duration:.2f}秒")
            print(f"   分析时间: {result.analysis_time:.2f}秒")
        else:
            print(f"❌ 视频分析失败: {result.error}")
            return False
        
        return True
        
    except Exception as e:
        print(f"❌ 测试失败: {e}")
        # 如果是依赖相关的错误，这是预期的
        if "DependencyError" in str(type(e)) or "PySceneDetect" in str(e):
            print("✅ 这是预期的依赖错误，说明快速失败机制工作正常")
            return True
        return False

def test_validation_without_fallback():
    """测试没有降级的验证"""
    print("\n🛡️ 测试没有降级的验证")
    print("=" * 50)
    
    try:
        from python_core.services.video_splitter.types import SceneInfo, DetectionConfig, ValidationError
        
        # 测试数据验证
        print("🔍 测试数据验证...")
        
        # 正确的数据应该成功
        valid_scene = SceneInfo(
            scene_number=1,
            start_time=0.0,
            end_time=5.0,
            duration=5.0,
            start_frame=0,
            end_frame=120
        )
        print("✅ 正确数据创建成功")
        
        # 错误的数据应该立即失败
        try:
            invalid_scene = SceneInfo(
                scene_number=0,  # 无效
                start_time=0.0,
                end_time=5.0,
                duration=5.0,
                start_frame=0,
                end_frame=120
            )
            print("❌ 应该抛出验证错误")
            return False
        except ValidationError as e:
            print(f"✅ 正确抛出验证错误: {e}")
        
        # 测试配置验证
        valid_config = DetectionConfig(threshold=30.0)
        print("✅ 正确配置创建成功")
        
        try:
            invalid_config = DetectionConfig(threshold=150.0)  # 超出范围
            print("❌ 应该抛出配置验证错误")
            return False
        except ValidationError as e:
            print(f"✅ 正确抛出配置验证错误: {e}")
        
        return True
        
    except Exception as e:
        print(f"❌ 验证测试失败: {e}")
        return False

def test_error_clarity():
    """测试错误信息的清晰性"""
    print("\n🔍 测试错误信息的清晰性")
    print("=" * 50)
    
    try:
        from python_core.services.video_splitter.validators import BasicVideoValidator
        from python_core.services.video_splitter.types import ValidationError
        
        validator = BasicVideoValidator()
        
        # 测试不存在文件的错误信息
        try:
            validator.validate("/clearly/nonexistent/path/video.mp4")
            print("❌ 应该抛出错误")
            return False
        except ValidationError as e:
            error_msg = str(e)
            print(f"✅ 错误信息: {error_msg}")
            
            # 验证错误信息包含有用信息
            if "not found" in error_msg and "/clearly/nonexistent/path/video.mp4" in error_msg:
                print("✅ 错误信息包含完整路径和明确描述")
            else:
                print("⚠️ 错误信息可能不够详细")
        
        return True
        
    except Exception as e:
        print(f"❌ 错误清晰性测试失败: {e}")
        return False

def test_no_silent_failures():
    """测试没有静默失败"""
    print("\n🚫 测试没有静默失败")
    print("=" * 50)
    
    try:
        # 检查依赖
        try:
            import scenedetect
        except ImportError:
            print("⚠️ PySceneDetect不可用，跳过此测试")
            return True
        
        from python_core.services.video_splitter import VideoSplitterService
        
        service = VideoSplitterService()
        
        # 测试无效输入，应该明确失败而不是静默
        result = service.analyze_video("/invalid/path.mp4")
        
        # 结果应该明确标记为失败
        if result.success:
            print("❌ 应该失败但标记为成功")
            return False
        
        # 应该有明确的错误信息
        if not result.error:
            print("❌ 失败但没有错误信息")
            return False
        
        print(f"✅ 明确失败，错误信息: {result.error}")
        
        # 错误信息应该有用
        if "not found" in result.error.lower() or "invalid" in result.error.lower():
            print("✅ 错误信息有用且具体")
        else:
            print(f"⚠️ 错误信息可能不够具体: {result.error}")
        
        return True
        
    except Exception as e:
        print(f"❌ 静默失败测试失败: {e}")
        return False

def main():
    """主函数"""
    print("🚀 简化测试：验证移除降级逻辑的效果")
    
    try:
        # 运行测试
        tests = [
            test_basic_functionality,
            test_validation_without_fallback,
            test_error_clarity,
            test_no_silent_failures
        ]
        
        results = []
        for test in tests:
            try:
                result = test()
                results.append(result)
            except Exception as e:
                print(f"❌ 测试 {test.__name__} 异常: {e}")
                results.append(False)
        
        # 总结
        print("\n" + "=" * 60)
        print("📊 移除降级逻辑测试总结")
        print("=" * 60)
        
        passed = sum(results)
        total = len(results)
        
        print(f"通过测试: {passed}/{total}")
        
        if passed == total:
            print("🎉 所有测试通过！移除降级逻辑成功！")
            print("\n✅ 关键改进:")
            print("   1. 快速失败 - 问题立即暴露，不会被掩盖")
            print("   2. 明确错误 - 错误信息清晰、具体、有用")
            print("   3. 一致行为 - 不同环境下行为完全一致")
            print("   4. 易于调试 - 问题根源容易定位和修复")
            print("   5. 避免隐患 - 不会因为降级而隐藏配置问题")
            
            print("\n🔧 错误处理原则:")
            print("   1. 立即失败 - 发现问题立即抛出异常")
            print("   2. 明确信息 - 提供足够的上下文信息")
            print("   3. 结构化异常 - 使用专门的异常类型")
            print("   4. 完整传播 - 保持错误信息的完整性")
            print("   5. 用户友好 - 错误信息对用户有帮助")
            
            return 0
        else:
            print("⚠️ 部分测试失败")
            return 1
            
    except Exception as e:
        print(f"❌ 测试过程中出错: {e}")
        import traceback
        traceback.print_exc()
        return 1

if __name__ == "__main__":
    exit_code = main()
    sys.exit(exit_code)
