//! Exemple de test pour la conversion FLAC en streaming
//!
//! Cet exemple télécharge un fichier audio depuis une URL et le convertit
//! en FLAC en utilisant la fonction create_flac_transformer().

use pmoaudiocache::cache;
use std::sync::Arc;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Initialiser le logger
    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::INFO)
        .init();

    // Créer un répertoire temporaire pour le cache
    let cache_dir = "/tmp/test_audio_cache";
    std::fs::create_dir_all(cache_dir)?;

    println!("Création du cache audio avec conversion FLAC streaming...");
    let cache = Arc::new(cache::new_cache(cache_dir, 100)?);

    // URL de test - fichier audio de test public
    // Note: Remplacez par une URL valide de votre choix
    let test_url = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3";

    println!("Téléchargement et conversion de: {}", test_url);
    println!("Ceci va télécharger le fichier en streaming et le convertir en FLAC...");

    // Ajouter le fichier au cache avec conversion FLAC
    match cache::add_with_metadata_extraction(&cache, test_url, Some("test:streaming")).await {
        Ok(pk) => {
            println!("✓ Fichier converti avec succès!");
            println!("  Clé primaire: {}", pk);

            let file_path = cache.get_file_path(&pk);
            println!("  Chemin: {}", file_path.display());

            if let Ok(metadata) = std::fs::metadata(&file_path) {
                println!("  Taille: {} bytes", metadata.len());
            }

            // Récupérer les métadonnées audio
            match cache::get_metadata(&cache, &pk) {
                Ok(metadata) => {
                    println!("  Métadonnées:");
                    if let Some(title) = &metadata.title {
                        println!("    Titre: {}", title);
                    }
                    if let Some(artist) = &metadata.artist {
                        println!("    Artiste: {}", artist);
                    }
                    if let Some(duration) = metadata.duration_secs {
                        println!("    Durée: {}s", duration);
                    }
                }
                Err(e) => println!("  Impossible de lire les métadonnées: {}", e),
            }
        }
        Err(e) => {
            eprintln!("✗ Erreur lors de la conversion: {}", e);
            return Err(e);
        }
    }

    println!("\nTest terminé avec succès!");

    Ok(())
}
