use check_diff::{CheckDiffError, check_diff, compile_rustfmt};
use clap::Parser;
use tempfile::Builder;
use tracing::info;

/// Inputs for the check_diff script
#[derive(Parser)]
struct CliInputs {
    /// Git url of a rustfmt fork to compare against the latest main rustfmt
    remote_repo_url: String,
    /// Name of the feature branch on the forked repo
    feature_branch: String,
    /// Optional commit hash from the feature branch
    #[arg(short, long)]
    commit_hash: Option<String>,
    /// Optional comma separated list of rustfmt config options to
    /// pass when running the feature branch
    #[arg(value_delimiter = ',', short, long, num_args = 1..)]
    rustfmt_config: Option<Vec<String>>,
}

fn main() -> Result<(), CheckDiffError> {
    tracing_subscriber::fmt()
        .with_env_filter(tracing_subscriber::EnvFilter::from_env("CHECK_DIFF_LOG"))
        .init();
    let args = CliInputs::parse();
    let tmp_dir = Builder::new().tempdir_in("").unwrap();
    info!("Created tmp_dir {:?}", tmp_dir);
    let check_diff_runners = compile_rustfmt(
        tmp_dir.path(),
        args.remote_repo_url,
        args.feature_branch,
        args.commit_hash,
    )?;

    // TODO: currently using same tmp dir path for sake of compilation
    let _ = check_diff(args.rustfmt_config, check_diff_runners, tmp_dir.path());

    Ok(())
}
