#![cfg(not(target_arch = "wasm32"))]
use crate::game::io;
use std::path::PathBuf;
pub fn data_dir() -> PathBuf {
let base = std::env::var_os("XDG_DATA_HOME")
.map(PathBuf::from)
.filter(|p| p.is_absolute())
.or_else(|| std::env::var_os("HOME").map(|h| PathBuf::from(h).join(".local/share")))
.unwrap_or_else(|| PathBuf::from("."));
base.join("morpion-solitaire")
}
pub fn path(algo: &str) -> PathBuf {
data_dir().join(format!("search-checkpoint-{algo}.msc"))
}
pub fn exists(algo: &str) -> bool {
path(algo).exists()
}
pub fn load(algo: &str) -> Option<io::Checkpoint> {
let content = std::fs::read_to_string(path(algo)).ok()?;
match io::import_checkpoint(&content) {
Ok(cp) => Some(cp),
Err(e) => {
log::error!("checkpoint load failed: {e}");
None
}
}
}
pub fn write(algo: &str, serialized: &str) -> std::io::Result<()> {
let path = path(algo);
if let Some(dir) = path.parent() {
let _ = std::fs::create_dir_all(dir);
}
let tmp = path.with_extension("tmp");
std::fs::write(&tmp, serialized.as_bytes())?;
std::fs::rename(&tmp, &path)
}