use std::{collections::HashMap, env, path::PathBuf};
use itertools::Itertools;
use smolguess::{
core::{LanguageDefinitions, LanguageMatch},
repository,
};
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 || args[1].is_empty() {
eprintln!("Usage: {} <path_to_bare_repository>", args[0]);
std::process::exit(1);
}
let mut stopwatch = stopwatch::Stopwatch::new();
stopwatch.start();
let repo_languages: Vec<LanguageMatch> = LanguageDefinitions::default()
.load_builtins()
.identify_files(repository::get_bare_repository_files(PathBuf::from(
&args[1],
)));
let grouped_matches: HashMap<_, _> = repo_languages
.into_iter()
.group_by(|matched| matched.language.name.clone())
.into_iter()
.map(|(group, items)| (group, items.collect_vec()))
.collect();
let mut sorted_groups: Vec<_> = grouped_matches.into_iter().collect();
sorted_groups.sort_by(|(_, first), (_, second)| second.len().cmp(&first.len()));
println!("{:#?}", sorted_groups);
println!();
sorted_groups
.iter()
.for_each(|item| println!("{}: {}", item.0, item.1.len()));
stopwatch.stop();
println!("\nOperation complete in {}", stopwatch);
}