use anyhow::Result;
use sdivi_core::{DivergenceSummary, Snapshot, ThresholdCheckResult, TrendResult};
use sdivi_patterns::PatternCatalog;
pub fn print_catalog(catalog: &PatternCatalog) -> Result<()> {
let json = serde_json::to_string_pretty(catalog)?;
println!("{json}");
Ok(())
}
pub fn print_snapshot(snapshot: &Snapshot) -> Result<()> {
let json = serde_json::to_string_pretty(snapshot)?;
println!("{json}");
Ok(())
}
pub fn print_divergence(summary: &DivergenceSummary) -> Result<()> {
let json = serde_json::to_string_pretty(summary)?;
println!("{json}");
Ok(())
}
pub fn print_check(result: &ThresholdCheckResult, summary: &DivergenceSummary) -> Result<()> {
let exit_code: i32 = if result.breached { 10 } else { 0 };
let exceeded: Vec<&str> = result
.breaches
.iter()
.map(|b| b.dimension.as_str())
.collect();
let output = serde_json::json!({
"exit_code": exit_code,
"exceeded": exceeded,
"summary": summary,
"applied_overrides": &result.applied_overrides,
});
let json = serde_json::to_string_pretty(&output)?;
println!("{json}");
Ok(())
}
pub fn print_trend(result: &TrendResult) -> Result<()> {
let json = serde_json::to_string_pretty(result)?;
println!("{json}");
Ok(())
}