use clap::Args;
use eyre::Result;
use lux_lib::{config::Config, operations, package::PackageReq, progress::MultiProgress};

#[derive(Args)]
pub struct Download {
    package_req: PackageReq,
}

pub async fn download(dl_data: Download, config: Config) -> Result<()> {
    let progress = MultiProgress::new(&config);
    let bar = progress.map(MultiProgress::new_bar);

    let rock = operations::Download::new(&dl_data.package_req, &config, &bar)
        .download_src_rock_to_file(None)
        .await?;

    bar.map(|b| {
        b.finish_with_message(format!(
            "Succesfully downloaded {}@{}",
            rock.name, rock.version
        ))
    });

    Ok(())
}
