//! Migration Demo: From Old Presets to New Template System
//! 
//! This example shows how to migrate from the old preset system
//! to the new Topaz template system.

use tvai::*;
use std::path::Path;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    println!("=== Migration from Old Presets to New Template System ===\n");

    // Show old preset system (now empty)
    println!("Old Preset System (deprecated):");
    let old_presets = global_presets().lock().unwrap();
    let video_presets = old_presets.list_video_presets();
    let image_presets = old_presets.list_image_presets();
    
    if video_presets.is_empty() && image_presets.is_empty() {
        println!("  ⚠ No presets available (moved to template system)");
    } else {
        println!("  Video presets: {:?}", video_presets);
        println!("  Image presets: {:?}", image_presets);
    }
    drop(old_presets);
    println!();

    // Show new template system
    println!("New Template System (recommended):");
    let templates = list_available_templates();
    println!("  Available templates: {}", templates.len());
    
    for (i, template_name) in templates.iter().take(5).enumerate() {
        if let Some((name, description)) = get_template_info(template_name) {
            println!("  {}. {} ({})", i + 1, name, template_name);
            println!("     {}", description);
        }
    }
    
    if templates.len() > 5 {
        println!("  ... and {} more templates", templates.len() - 5);
    }
    println!();

    // Migration examples
    println!("=== Migration Examples ===\n");

    // Example 1: Video upscaling migration
    println!("1. Video Upscaling Migration:");
    println!("   Old way (deprecated):");
    println!("   let presets = global_presets().lock().unwrap();");
    println!("   let preset = presets.get_video_preset(\"general_2x\");");
    println!();
    println!("   New way (recommended):");
    println!("   upscale_to_4k(input, output).await?;");
    println!("   // or");
    println!("   process_with_template(input, output, \"upscale_to_4k\").await?;");
    println!();

    // Example 2: Slow motion migration
    println!("2. Slow Motion Migration:");
    println!("   Old way (deprecated):");
    println!("   let presets = global_presets().lock().unwrap();");
    println!("   let preset = presets.get_video_preset(\"slow_motion_4x\");");
    println!();
    println!("   New way (recommended):");
    println!("   slow_motion_4x(input, output).await?;");
    println!("   // or");
    println!("   process_with_template(input, output, \"4x_slow_motion\").await?;");
    println!();

    // Example 3: Custom processing migration
    println!("3. Custom Processing Migration:");
    println!("   Old way (deprecated):");
    println!("   let mut presets = global_presets().lock().unwrap();");
    println!("   presets.add_video_preset(name, custom_preset);");
    println!();
    println!("   New way (recommended):");
    println!("   let manager = global_topaz_templates().lock().unwrap();");
    println!("   manager.load_from_file(name, \"template.json\")?;");
    println!("   process_with_template(input, output, name).await?;");
    println!();

    // Show advantages of new system
    println!("=== Advantages of New Template System ===");
    println!("✅ Based on official Topaz Video AI templates");
    println!("✅ Complete parameter coverage (all Topaz settings)");
    println!("✅ JSON format compatible with Topaz Video AI");
    println!("✅ Built-in validation and error handling");
    println!("✅ Easy template sharing and customization");
    println!("✅ Convenient API functions for common tasks");
    println!("✅ Better performance and memory usage");
    println!();

    // Demonstrate template application
    println!("=== Template Application Demo ===");
    let manager = global_topaz_templates().lock().unwrap();
    
    if let Ok(applied) = manager.apply_template("upscale_to_4k") {
        println!("Applied template: {}", applied.name);
        println!("Description: {}", applied.description);
        
        if let Some(upscale) = &applied.enhance_params.upscale {
            println!("Upscale settings:");
            println!("  • Scale factor: {}x", upscale.scale_factor);
            println!("  • AI Model: {:?}", upscale.model);
            println!("  • Quality preset: {:?}", upscale.quality_preset);
        }
        
        if let Some(interpolation) = &applied.enhance_params.interpolation {
            println!("Interpolation settings:");
            println!("  • Multiplier: {}x", interpolation.multiplier);
            println!("  • Model: {:?}", interpolation.model);
        }
    }
    drop(manager);
    println!();

    // Migration checklist
    println!("=== Migration Checklist ===");
    println!("□ Replace global_presets() calls with global_topaz_templates()");
    println!("□ Use template-based functions: upscale_to_4k(), convert_to_60fps(), etc.");
    println!("□ Convert custom presets to JSON template format");
    println!("□ Update error handling for new template system");
    println!("□ Test with new template validation");
    println!("□ Update documentation and examples");
    println!();

    println!("=== Migration Complete! ===");
    println!("The new template system provides better functionality and compatibility.");
    println!("See docs/TEMPLATES.md for detailed documentation.");

    Ok(())
}
