papa 3.0.0-alpha

A cli mod manager for the Northstar launcher
use std::collections::{BTreeMap, BTreeSet};

use anyhow::Result;
use owo_colors::OwoColorize;
use thermite::prelude::*;
use tracing::{debug, instrument, trace};

use crate::{config::CONFIG, model::ModName};

#[instrument]
pub fn list(global: bool, all: bool) -> Result<()> {
    if global {
        todo!();
    }
    let mods = find_mods(CONFIG.install_dir())?;
    debug!("Found {} mods", mods.len());
    trace!("{:?}", mods);
    let mut grouped_mods: BTreeMap<ModName, BTreeSet<String>> = BTreeMap::new();
    for m in mods {
        let local_name = m.mod_json.name.clone();
        let mn = m.into();
        if let Some(group) = grouped_mods.get_mut(&mn) {
            debug!("Adding submod {} to group {}", local_name, mn);
            group.insert(local_name);
        } else {
            debug!("Adding group {} for sdubmod {}", mn, local_name);
            let group = BTreeSet::from([local_name]);
            grouped_mods.insert(mn, group);
        }
    }

    println!("Installed mods: ");
    for (group, names) in grouped_mods {
        if names.len() == 1 {
            println!("-  {}", group.bright_blue().bold());
        } else {
            println!("-  {}:", group.bright_blue().bold());
            for n in names {
                println!("    {}", n.bright_cyan().bold());
            }
        }
    }
    Ok(())
}