#![cfg_attr(coverage_nightly, coverage(off))]
use crate::services::defect_probability::DefectScore;
use anyhow::Result;
pub fn format_defect_json(predictions: &[(String, DefectScore)]) -> Result<String> {
let json_data = serde_json::json!({
"defect_predictions": predictions.iter().map(|(file, score)| {
serde_json::json!({
"file": file,
"probability": score.probability,
"confidence": score.confidence,
"risk_factors": score.contributing_factors,
})
}).collect::<Vec<_>>(),
"summary": {
"total_files": predictions.len(),
"high_risk_files": predictions.iter().filter(|(_, s)| s.probability > 0.7).count(),
"medium_risk_files": predictions.iter().filter(|(_, s)| s.probability > 0.4 && s.probability <= 0.7).count(),
"low_risk_files": predictions.iter().filter(|(_, s)| s.probability <= 0.4).count(),
}
});
serde_json::to_string_pretty(&json_data).map_err(Into::into)
}