/// Exemple minimal de transformer sans dépendances externes complexes

// Import direct du type depuis le module
// Note: Cet exemple montre comment utiliser l'API de transformation

fn main() {
    println!("Exemple d'utilisation du module download avec transformers\n");

    println!("1. Téléchargement simple:");
    println!("   let dl = download(\"/tmp/file.dat\", \"https://example.com/file.dat\");");
    println!("   dl.wait_until_finished().await?;\n");

    println!("2. Téléchargement avec transformation:");
    println!("   let transformer: StreamTransformer = Box::new(|response, mut file, ctx| {{");
    println!("       Box::pin(async move {{");
    println!("           let mut stream = response.bytes_stream();");
    println!("           let mut total = 0u64;");
    println!();
    println!("           while let Some(chunk_result) = stream.next().await {{");
    println!("               let chunk = chunk_result.map_err(|e| e.to_string())?;");
    println!();
    println!("               // Transformation ici (ex: compression, conversion)");
    println!("               let transformed = process(chunk);");
    println!();
    println!("               file.write_all(&transformed).await.map_err(|e| e.to_string())?;");
    println!("               total += transformed.len() as u64;");
    println!("               ctx.report_progress(total);");
    println!("           }}");
    println!();
    println!("           file.flush().await.map_err(|e| e.to_string())?;");
    println!("           Ok(())");
    println!("       }})");
    println!("   }});\n");

    println!("   let dl = download_with_transformer(\"/tmp/out.dat\", \"https://example.com/in.dat\", Some(transformer));");
    println!("   dl.wait_until_finished().await?;\n");

    println!("3. Méthodes disponibles sur Download:");
    println!("   - filename()         : Chemin du fichier");
    println!("   - current_size()     : Taille téléchargée (source)");
    println!("   - transformed_size() : Taille transformée (destination)");
    println!("   - expected_size()    : Taille attendue (Content-Length)");
    println!("   - finished()         : Téléchargement terminé?");
    println!("   - error()            : Erreur éventuelle");
    println!("   - wait_until_min_size(n) : Attend au moins n bytes");
    println!("   - wait_until_finished()  : Attend la fin");
    println!("   - open()                 : Ouvre le fichier pour lecture");
    println!("   - pos() / set_pos()      : Position de lecture\n");

    println!("Pour des exemples complets, voir:");
    println!("  - examples/test_download_transformer.rs");
    println!("  - DOWNLOAD_MODULE.md");
}
