use tvai_sdk::{TvaiSdk, TemplateBuilder};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("=== 内置配置测试 ===\n");

    // 创建 SDK 实例
    let sdk = TvaiSdk::new();

    // 测试内置音频编解码器
    println!("1. 测试内置音频编解码器:");
    let audio_codecs = sdk.ffmpeg_generator.get_available_audio_codecs();
    println!("   加载了 {} 个音频编解码器", audio_codecs.len());
    
    for codec in audio_codecs {
        println!("   - {}: {}", codec.name, codec.ffmpeg_opts);
    }

    // 测试 AAC 编解码器查找
    if let Some(aac) = sdk.ffmpeg_generator.get_audio_codec("AAC") {
        println!("   ✓ 成功找到 AAC 编解码器");
        if let Some(bitrate) = &aac.bitrate {
            println!("     比特率范围: {}-{} kbps", bitrate.min, bitrate.max);
        }
    } else {
        println!("   ✗ 未找到 AAC 编解码器");
    }

    println!();

    // 测试内置视频编码器
    println!("2. 测试内置视频编码器:");
    let video_encoders = sdk.ffmpeg_generator.get_available_video_encoders();
    println!("   加载了 {} 个视频编码器", video_encoders.len());
    
    for encoder in video_encoders.iter().take(5) { // 只显示前5个
        println!("   - {} ({}): {}", encoder.id, encoder.encoder, 
                 encoder.ffmpeg_opts.chars().take(50).collect::<String>());
    }

    // 测试 H.264 编码器查找
    if let Some(h264) = sdk.ffmpeg_generator.get_video_encoder_by_name("H264") {
        println!("   ✓ 成功找到 H.264 编码器: {}", h264.id);
    } else {
        println!("   ✗ 未找到 H.264 编码器");
    }

    println!();

    // 测试模型推荐
    println!("3. 测试模型推荐:");
    let test_resolutions = [480, 720, 1080, 2160];
    for height in test_resolutions {
        let recommended = sdk.ffmpeg_generator.recommend_model_for_resolution(height);
        println!("   {}p 推荐模型: {:?}", height, recommended);
    }

    println!();

    // 测试音频编解码器参数生成
    println!("4. 测试音频编解码器参数生成:");
    let aac_params = sdk.ffmpeg_generator.generate_audio_codec_params("AAC", Some(192));
    println!("   AAC 192kbps: {}", aac_params);
    
    let ac3_params = sdk.ffmpeg_generator.generate_audio_codec_params("AC3", Some(448));
    println!("   AC3 448kbps: {}", ac3_params);

    println!();

    // 测试视频编码器参数生成
    println!("5. 测试视频编码器参数生成:");
    if let Some(encoder) = sdk.ffmpeg_generator.get_video_encoder("libx264-default") {
        let params = sdk.ffmpeg_generator.generate_video_encoder_params(&encoder.id, "vbr", Some(23));
        println!("   libx264 CRF 23: {}", params);
    }

    println!();

    // 测试兼容性筛选
    println!("6. 测试兼容性筛选:");
    
    let windows_encoders = sdk.ffmpeg_generator.get_compatible_video_encoders("windows", None);
    println!("   Windows 兼容编码器: {} 个", windows_encoders.len());
    
    let nvidia_encoders = sdk.ffmpeg_generator.get_compatible_video_encoders("windows", Some("nvidia"));
    println!("   NVIDIA 编码器: {} 个", nvidia_encoders.len());
    
    let mp4_encoders = sdk.ffmpeg_generator.get_encoders_for_extension("mp4");
    println!("   MP4 兼容编码器: {} 个", mp4_encoders.len());

    println!();

    // 测试完整的 FFmpeg 命令生成
    println!("7. 测试完整的 FFmpeg 命令生成:");
    
    let template = TemplateBuilder::new("内置配置测试")
        .enable_enhancement("prob-4")
        .video_codec("H264", Some(23))
        .audio_settings("AAC", 192, 2)
        .build()?;

    let command = sdk.generate_ffmpeg_command(&template, "input.mp4", "output.mp4")?;
    println!("   生成的命令: {}", command);

    println!();

    // 测试自动编码器选择
    println!("8. 测试自动编码器选择:");
    
    match sdk.ffmpeg_generator.generate_with_auto_encoder(&template, "input.mp4", "output.mp4", "windows", Some("nvidia")) {
        Ok(auto_command) => println!("   自动选择 (Windows+NVIDIA): {}", auto_command),
        Err(e) => println!("   自动选择失败: {}", e),
    }

    println!();

    // 生成编码器报告
    println!("9. 编码器报告:");
    let report = sdk.ffmpeg_generator.generate_encoder_report();
    let lines: Vec<&str> = report.lines().take(10).collect(); // 只显示前10行
    for line in lines {
        println!("   {}", line);
    }
    println!("   ... (报告已截断)");

    println!("\n=== 测试完成 ===");
    println!("所有内置配置功能正常工作！");

    Ok(())
}
