use crate::utils::{fix_cursor_process_monitor_json, fix_cursor_process_monitor_json_file};
use colored::Colorize;
use std::fs;
use std::path::PathBuf;
pub fn run_fix_process_monitor_json(
path: PathBuf,
check: bool,
stdout: bool,
) -> Result<(), String> {
if check {
let content = fs::read_to_string(&path)
.map_err(|error| format!("Failed to read {}: {error}", path.display()))?;
let (_, report) = fix_cursor_process_monitor_json(&content)?;
if report.is_some() {
println!("{} {} needs repair", "fix".yellow().bold(), path.display());
} else {
println!("{} {}", "ok".green().bold(), path.display());
}
return Ok(());
}
if stdout {
let content = fs::read_to_string(&path)
.map_err(|error| format!("Failed to read {}: {error}", path.display()))?;
let (fixed, report) = fix_cursor_process_monitor_json(&content)?;
print!("{fixed}");
if let Some(report) = report {
eprintln!(
"{} repaired {} samples from {}",
"fix".green().bold(),
report.sample_count,
path.display()
);
}
return Ok(());
}
match fix_cursor_process_monitor_json_file(&path)? {
Some(report) => {
println!(
"{} {} ({} samples)",
"repaired".green().bold(),
path.display(),
report.sample_count
);
}
None => {
println!("{} {}", "ok".green().bold(), path.display());
}
}
Ok(())
}