use tvai_sdk::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Topaz Video AI SDK - Benchmarks Demo");
    println!("===================================");

    let sdk = TvaiSdk::new();

    // Example 1: Image Enhancement Benchmarks
    println!("\n1. Image Enhancement Benchmarks:");
    
    let enhancement_engines = vec![
        ("Artemis", "alq-13", "Animation/Cartoon optimization"),
        ("Iris", "iris-3", "Low-light/Noise processing"),
        ("Proteus", "prob-4", "General purpose enhancement"),
        ("Gaia", "ghq-5", "Natural scene optimization"),
        ("Nyx", "nyx-2", "Noise reduction specialist"),
    ];

    for (engine, model, description) in enhancement_engines {
        println!("\n   {} Engine ({}):", engine, description);
        
        // Test different scales
        let scales = if engine == "Nyx" { vec![1, 2] } else { vec![1, 2, 4] };
        
        for scale in scales {
            let template = TemplateBuilder::benchmark_template(engine, scale)?;
            let command = sdk.generate_ffmpeg_command(&template, "input.mp4", &format!("benchmark_{}_{}.mp4", engine.to_lowercase(), scale))?;
            
            println!("     {}X Scale: {}", scale, command);
        }
    }

    // Example 2: Specialized Enhancement Benchmarks
    println!("\n2. Specialized Enhancement Benchmarks:");
    
    // Rhea - 4X only
    let rhea_template = TemplateBuilder::benchmark_template("rhea", 4)?;
    let rhea_command = sdk.generate_ffmpeg_command(&rhea_template, "input.mp4", "benchmark_rhea_4x.mp4")?;
    println!("   Rhea 4X (Specialized): {}", rhea_command);
    
    // RXL - 4X ultra-high quality
    let rxl_template = TemplateBuilder::benchmark_template("rxl", 4)?;
    let rxl_command = sdk.generate_ffmpeg_command(&rxl_template, "input.mp4", "benchmark_rxl_4x.mp4")?;
    println!("   RXL 4X (Ultra-HQ): {}", rxl_command);
    
    // Hyperion HDR - 1X only
    let hdr_template = TemplateBuilder::benchmark_template("hyperion", 1)?;
    let hdr_command = sdk.generate_ffmpeg_command(&hdr_template, "input.mp4", "benchmark_hdr.mp4")?;
    println!("   Hyperion HDR: {}", hdr_command);

    // Example 3: Frame Interpolation Benchmarks
    println!("\n3. Frame Interpolation Benchmarks:");
    
    // 4X Slow Motion engines
    let slowmo_4x_engines = vec![
        ("Apollo", "apo-8", "High quality interpolation"),
        ("APFast", "apf-1", "Fast interpolation"),
        ("Chronos", "chr-2", "Balanced quality/speed"),
        ("CHFast", "chf-3", "Fast interpolation"),
    ];

    for (engine, model, description) in slowmo_4x_engines {
        let template = TemplateBuilder::new(&format!("Benchmark {} 4X Slowmo", engine))
            .description(&format!("{} - 4X slow motion benchmark", description))
            .enable_enhancement("prob-4") // Base enhancement
            .enable_frame_interpolation(model, 4.0) // 4X slow motion
            .benchmark_mode(true)
            .build()?;
            
        let command = sdk.generate_ffmpeg_command(&template, "input.mp4", &format!("benchmark_slowmo_{}_{}.mp4", engine.to_lowercase(), 4))?;
        println!("   {} 4X ({}): {}", engine, description, command);
    }

    // 16X Slow Motion - Aion only
    let aion_template = TemplateBuilder::new("Benchmark Aion 16X Slowmo")
        .description("Aion ultra-high slow motion benchmark")
        .enable_enhancement("prob-4")
        .enable_frame_interpolation("aion-1", 16.0) // 16X slow motion
        .benchmark_mode(true)
        .build()?;
        
    let aion_command = sdk.generate_ffmpeg_command(&aion_template, "input.mp4", "benchmark_slowmo_aion_16x.mp4")?;
    println!("   Aion 16X (Ultra-slow): {}", aion_command);

    // Example 4: Performance Comparison Templates
    println!("\n4. Performance Comparison Templates:");
    
    // Compare different engines at 2X scale
    println!("   2X Upscaling Comparison:");
    let comparison_engines = vec!["Artemis", "Iris", "Proteus", "Gaia"];
    
    for engine in comparison_engines {
        let template = TemplateBuilder::benchmark_template(engine, 2)?;
        let command = sdk.generate_ffmpeg_command(&template, "test_input.mp4", &format!("compare_2x_{}.mp4", engine.to_lowercase()))?;
        println!("     {}: {}", engine, command);
    }

    // Example 5: Benchmark Mode Features
    println!("\n5. Benchmark Mode Features:");
    
    let normal_template = TemplateBuilder::new("Normal Template")
        .description("Normal processing template")
        .enable_enhancement("prob-4")
        .enhancement_params(25, 30, 20)
        .enable_stabilization(60, 1)
        .audio_settings("aac", 192, 2)
        .build()?;

    let benchmark_template = TemplateBuilder::new("Benchmark Template")
        .description("Benchmark mode template")
        .enable_enhancement("prob-4")
        .enhancement_params(0, 0, 0) // No additional processing
        .benchmark_mode(true) // Disables non-essential features
        .build()?;

    println!("   Normal Template Features:");
    println!("     Stabilization: {}", normal_template.settings.stabilize.active);
    println!("     Grain: {}", normal_template.settings.grain.active);
    println!("     Audio: {}", normal_template.settings.output.audio_codec.is_some());
    
    println!("   Benchmark Template Features:");
    println!("     Stabilization: {}", benchmark_template.settings.stabilize.active);
    println!("     Grain: {}", benchmark_template.settings.grain.active);
    println!("     Audio: {}", benchmark_template.settings.output.audio_codec.is_some());

    let normal_command = sdk.generate_ffmpeg_command(&normal_template, "input.mp4", "normal_output.mp4")?;
    let benchmark_command = sdk.generate_ffmpeg_command(&benchmark_template, "input.mp4", "benchmark_output.mp4")?;
    
    println!("   Normal Command: {}", normal_command);
    println!("   Benchmark Command: {}", benchmark_command);

    // Example 6: Engine Capabilities Summary
    println!("\n6. Engine Capabilities Summary:");
    
    println!("   📊 Scaling Capabilities:");
    println!("     Artemis:     1X ✅  2X ✅  4X ✅  (Animation optimized)");
    println!("     Iris:        1X ✅  2X ✅  4X ✅  (Low-light optimized)");
    println!("     Proteus:     1X ✅  2X ✅  4X ✅  (General purpose)");
    println!("     Gaia:        1X ✅  2X ✅  4X ✅  (Natural scenes)");
    println!("     Nyx:         1X ✅  2X ✅  4X ❌  (Noise reduction)");
    println!("     Nyx Fast:    1X ✅  2X ❌  4X ❌  (Fast noise reduction)");
    println!("     Rhea:        1X ❌  2X ❌  4X ✅  (Specialized 4X)");
    println!("     RXL:         1X ❌  2X ❌  4X ✅  (Ultra-high quality 4X)");
    println!("     Hyperion:    1X ✅  2X ❌  4X ❌  (HDR processing)");

    println!("\n   🎬 Frame Interpolation:");
    println!("     Apollo:      4X Slowmo ✅  (High quality)");
    println!("     APFast:      4X Slowmo ✅  (Fast processing)");
    println!("     Chronos:     4X Slowmo ✅  (Balanced)");
    println!("     CHFast:      4X Slowmo ✅  (Fast processing)");
    println!("     Aion:        16X Slowmo ✅ (Ultra-slow motion)");

    println!("\n   🎯 Recommended Use Cases:");
    println!("     • Animation/Cartoons: Artemis");
    println!("     • Low-light footage: Iris");
    println!("     • General content: Proteus");
    println!("     • Nature/Landscapes: Gaia");
    println!("     • Noisy footage: Nyx/Nyx Fast");
    println!("     • Maximum 4X quality: RXL");
    println!("     • HDR content: Hyperion");
    println!("     • Slow motion: Apollo/Chronos");
    println!("     • Ultra-slow motion: Aion");

    println!("\n✅ Benchmarks demo completed successfully!");
    println!("\nKey Features Demonstrated:");
    println!("  • Comprehensive AI engine benchmarking");
    println!("  • Scale-specific performance testing");
    println!("  • Frame interpolation benchmarks");
    println!("  • Benchmark mode optimization");
    println!("  • Engine capability comparison");
    println!("  • Performance-focused command generation");

    Ok(())
}
