use super::types::{CompareConfig, DebtmapJsonInput, ValidationResult};
use anyhow::{Context, Result};
use std::fs;
use std::path::Path;
pub fn read_automation_mode() -> bool {
std::env::var("PRODIGY_AUTOMATION")
.unwrap_or_default()
.eq_ignore_ascii_case("true")
|| std::env::var("PRODIGY_VALIDATION")
.unwrap_or_default()
.eq_ignore_ascii_case("true")
}
pub fn load_both_debtmaps(config: &CompareConfig) -> Result<(DebtmapJsonInput, DebtmapJsonInput)> {
let before = load_debtmap(&config.before_path)?;
let after = load_debtmap(&config.after_path)?;
Ok((before, after))
}
pub fn load_debtmap(path: &Path) -> Result<DebtmapJsonInput> {
let content = fs::read_to_string(path)
.with_context(|| format!("Failed to read debtmap file: {}", path.display()))?;
serde_json::from_str(&content)
.with_context(|| format!("Failed to parse debtmap JSON from: {}", path.display()))
}
pub fn write_validation_result(path: &Path, result: &ValidationResult) -> Result<()> {
if let Some(parent) = path.parent() {
fs::create_dir_all(parent)
.with_context(|| format!("Failed to create directory: {}", parent.display()))?;
}
let json = serde_json::to_string_pretty(result)?;
fs::write(path, json)
.with_context(|| format!("Failed to write validation result to: {}", path.display()))?;
Ok(())
}
pub fn print_summary(result: &ValidationResult) {
println!("\n=== Debtmap Validation Results ===");
println!("Completion: {:.1}%", result.completion_percentage);
println!("Status: {}", result.status);
if !result.improvements.is_empty() {
println!("\nImprovements:");
for improvement in &result.improvements {
println!(" ✓ {}", improvement);
}
}
if !result.remaining_issues.is_empty() {
println!("\nRemaining Issues:");
for issue in &result.remaining_issues {
println!(" ✗ {}", issue);
}
}
println!(
"\nBefore: {} items (avg score: {:.1})",
result.before_summary.total_items, result.before_summary.average_score
);
println!(
"After: {} items (avg score: {:.1})",
result.after_summary.total_items, result.after_summary.average_score
);
}