use std::path::PathBuf;
use std::sync::OnceLock;
static BASE_DIR: OnceLock<PathBuf> = OnceLock::new();
pub const CAHIER_DIR: &str = "cahier_logs";
pub const DB_FILENAME: &str = "cahier_logs/cahier.db";
pub const HISTORY_FILENAME: &str = "cahier_logs/cahier_history.txt";
pub const MAX_HISTORY_ENTRIES: usize = 5000;
pub const DEFAULT_MAX_OUTPUT_SIZE: usize = 16384;
pub const OUTPUT_DIR: &str = "cahier_logs/outputs";
pub const TEMP_DIR: &str = "cahier_logs/tmp";
pub const ENV_STORE_FILENAME: &str = "cahier_logs/env_state.json";
pub fn init_base_dir() -> PathBuf {
let base = std::env::current_dir().unwrap_or_else(|_| PathBuf::from("."));
set_base_dir(base)
}
pub fn set_base_dir(base: PathBuf) -> PathBuf {
BASE_DIR.get_or_init(|| base).clone()
}
pub fn base_dir() -> PathBuf {
BASE_DIR
.get_or_init(|| std::env::current_dir().unwrap_or_else(|_| PathBuf::from(".")))
.clone()
}
pub fn cahier_dir() -> PathBuf {
base_dir().join(CAHIER_DIR)
}
pub fn db_path() -> PathBuf {
base_dir().join(DB_FILENAME)
}
pub fn history_path() -> PathBuf {
base_dir().join(HISTORY_FILENAME)
}
pub fn output_dir() -> PathBuf {
base_dir().join(OUTPUT_DIR)
}
pub fn temp_dir() -> PathBuf {
base_dir().join(TEMP_DIR)
}
pub fn env_store_path() -> PathBuf {
base_dir().join(ENV_STORE_FILENAME)
}