Documentation
use std::error::Error;

use tracing::{Level, debug};
use tracing_subscriber::fmt::format::FmtSpan;

mod build;
mod cli;
pub mod zle;

use cli::Cli;

fn verbosity_to_log_level(verbosity: u8) -> Level {
    match verbosity {
        0 => Level::WARN,
        1 => Level::INFO,
        2 => Level::DEBUG,
        _ => Level::TRACE,
    }
}

fn initialize_tracing(cli: &Cli) {
    tracing_subscriber::fmt::fmt()
        .with_span_events(FmtSpan::NONE)
        .with_target(false)
        .with_max_level(verbosity_to_log_level(cli.verbose))
        .with_writer(std::io::stderr)
        .init();
}

fn main() -> Result<(), Box<dyn Error>> {
    let cli: Cli = clap::Parser::parse();

    initialize_tracing(&cli);
    debug!(?cli);
    zle::go(cli.cmd)?;
    Ok(())
}