use std::env;

use frogue::config::DATABASE_URL_VAR_KEY;
use miette::bail;

#[actix_web::main]
async fn main() -> miette::Result<()> {
    // Dirty hack that should probably be removed
    match std::env::var(DATABASE_URL_VAR_KEY) {
        Ok(_db_url) => {}
        Err(std::env::VarError::NotPresent) => unsafe {
            std::env::set_var(
                DATABASE_URL_VAR_KEY,
                concat!(
                    "sqlite:///tmp/",
                    env!["CARGO_CRATE_NAME"],
                    ".sqlite?mode=rwc"
                ),
            );
        },
        Err(e) => {
            bail!(
                "Unknown error while attempting to read {DATABASE_URL_VAR_KEY} from environment: {e}"
            )
        }
    }
    // Check if we're being called as a git hook
    let args: Vec<String> = env::args().collect();
    if args.len() >= 3 && args[1] == "git-hook" {
        let mode = frogue::git_hook::HookMode::from_arg(&args[2])
            .ok_or_else(|| miette::miette!("invalid hook mode: {}", args[2]))?;
        return frogue::git_hook::run_hook(mode)
            .await
            .map_err(|e| miette::miette!("{}", e));
    }

    frogue::run().await
}
