use std::path::PathBuf;
use serde::Serialize;
use crate::error::ForgeError;
use crate::fsutil::{atomic_write_file, create_dir_all};
use crate::model::InstallReport;
use crate::paths::app_home;
use crate::util::now_secs;
pub(crate) fn write_install_report_log(report: &InstallReport) -> Result<PathBuf, ForgeError> {
let log_dir = app_home().join("logs");
create_dir_all(&log_dir)?;
let timestamp = now_secs();
let path = log_dir.join(format!("install-{timestamp}.json"));
write_json(&path, report, "installation log")?;
Ok(path)
}
fn write_json(
path: &std::path::Path,
value: &impl Serialize,
label: &str,
) -> Result<(), ForgeError> {
let output = serde_json::to_vec_pretty(value)
.map_err(|error| ForgeError::Parse(format!("failed to serialize {label}: {error}")))?;
atomic_write_file(path, &output)
}