use serde::Serialize;
use hwpforge_smithy_hwpx::presets::{builtin_presets, PresetInfo};
use crate::output::ToolErrorInfo;
#[derive(Debug, Serialize)]
pub struct TemplatesData {
pub templates: Vec<PresetInfo>,
}
pub fn run_templates(name: Option<&str>) -> Result<TemplatesData, ToolErrorInfo> {
let presets = builtin_presets();
if let Some(name) = name {
let filtered: Vec<PresetInfo> = presets.into_iter().filter(|p| p.name == name).collect();
if filtered.is_empty() {
return Err(ToolErrorInfo::new(
"PRESET_NOT_FOUND",
format!("Preset '{name}' not found"),
"Available presets: default, modern, classic, latest. Use hwpforge_templates without a name to list all.",
));
}
Ok(TemplatesData { templates: filtered })
} else {
Ok(TemplatesData { templates: presets })
}
}