use std::fs;
use super::{FontFile, ResourceSet, sanitize_ident};
use crate::meta::Project;
pub fn stage(project: &Project, set: &ResourceSet, fonts: &[FontFile]) -> Result<(), String> {
let harmony = project.root.join("platform/ohos");
if !harmony.exists() {
return Ok(());
}
let dir = harmony.join("entry/src/main/resources/rawfile/day");
let _ = fs::remove_dir_all(&dir);
if set.images.is_empty() && set.data.is_empty() && fonts.is_empty() {
return Ok(());
}
fs::create_dir_all(&dir).map_err(|e| format!("mkdir {}: {e}", dir.display()))?;
if !fonts.is_empty() {
let fdir = dir.join("fonts");
fs::create_dir_all(&fdir).map_err(|e| format!("mkdir {}: {e}", fdir.display()))?;
let mut manifest = Vec::new();
for f in fonts {
let name = f.staged_name();
let dest = fdir.join(&name);
fs::copy(&f.path, &dest).map_err(|e| format!("stage {}: {e}", dest.display()))?;
manifest.push(serde_json::json!({ "family": f.family, "file": name }));
}
let json = serde_json::to_string_pretty(&manifest).expect("font manifest");
fs::write(dir.join("fonts.json"), json).map_err(|e| format!("stage fonts.json: {e}"))?;
}
for img in &set.images {
let dest = dir.join(format!("{}.png", sanitize_ident(&img.name)));
fs::copy(&img.path, &dest).map_err(|e| format!("stage {}: {e}", dest.display()))?;
}
for d in &set.data {
let dest = dir.join(&d.name);
fs::copy(&d.path, &dest).map_err(|e| format!("stage {}: {e}", dest.display()))?;
}
Ok(())
}