use std::collections::HashMap;
use std::path::PathBuf;
use serde::Deserialize;
use super::merge::{OpenCodeProvider, extract_tool_models};
use super::types::{CuredModel, CureError};
#[derive(Debug, Deserialize)]
struct OpenCodeProviders(HashMap<String, OpenCodeProvider>);
pub(crate) fn opencode_cache_path() -> Option<PathBuf> {
let home = crate::utils::home_dir()?;
Some(home.join(".cache").join("opencode").join("models.json"))
}
pub(crate) fn load_opencode_models() -> Result<HashMap<String, Vec<CuredModel>>, CureError> {
let path = opencode_cache_path().ok_or(CureError::NoHomeDir)?;
if !path.exists() {
return Err(CureError::OpenCodeCacheNotFound { path });
}
let content = std::fs::read_to_string(&path)?;
let providers: OpenCodeProviders = serde_json::from_str(&content)?;
Ok(extract_tool_models(&providers.0))
}