use std::io::{Error, ErrorKind};
use crate::{modrinth::{project, versions}, config::Cfg, db::insert_mod, Modloader};
pub async fn add(config: Cfg, mc_mod: String) -> Result<(), Box<dyn std::error::Error>> {
println!("Adding");
let project = project(String::from(&config.apis.modrinth), &mc_mod).await;
dbg!(&project);
let loader = Modloader::Fabric;
if project.versions.is_empty() { panic!("This should never happen"); };
let current_version = get_current(config, String::from(&project.id)).await?;
match insert_mod(project.id, project.title, current_version, project.versions, loader, String::from("1.19.2")) {
Err(err) => { Err(Box::new(err)) },
Ok(()) => Ok(()),
}
}
async fn get_current(config: Cfg, id: String) -> Result<String, Box<dyn std::error::Error>> {
let available_versions = versions(config.apis.modrinth, id, Modloader::Fabric, String::from("1.19.2")).await;
match available_versions.len() {
0 => Err(Box::new(Error::new(ErrorKind::NotFound, "NO_VERSIONS_AVAILABLE"))),
//TODO compare publish dates
1.. => Ok(available_versions[0].id.to_string()),
_ => panic!("available_versions should never be negative"),
}
}