use std::env;
use std::path::{Path, PathBuf};
use super::names::{UBLX_NAMES, path_to_hex};
pub(super) fn config_dir() -> Option<PathBuf> {
#[cfg(windows)]
{
env::var("APPDATA")
.ok()
.map(|p| PathBuf::from(p).join(UBLX_NAMES.pkg_name))
}
#[cfg(not(windows))]
{
env::var("HOME")
.ok()
.map(|h| PathBuf::from(h).join(".config").join(UBLX_NAMES.pkg_name))
}
}
pub(super) fn cache_dir() -> Option<PathBuf> {
#[cfg(windows)]
{
env::var("LOCALAPPDATA")
.ok()
.map(|p| PathBuf::from(p).join(UBLX_NAMES.pkg_name))
}
#[cfg(not(windows))]
{
env::var("HOME").ok().map(|h| {
PathBuf::from(h)
.join(".local")
.join("share")
.join(UBLX_NAMES.pkg_name)
})
}
}
#[must_use]
pub(super) fn db_dir() -> Option<PathBuf> {
cache_dir().map(|c| c.join(UBLX_NAMES.pkg_name_plural))
}
#[must_use]
pub fn global_config_toml() -> Option<PathBuf> {
config_dir().map(|c| c.join(UBLX_NAMES.local_config_visible_toml))
}
#[must_use]
pub fn last_applied_config_path(dir: &Path) -> Option<PathBuf> {
cache_dir().map(|c| c.join("configs").join(format!("{}.toml", path_to_hex(dir))))
}
#[must_use]
pub fn rel_path_is_exact_local_config_toml(path_str: &str) -> bool {
let trim = path_str.trim();
if Path::new(trim).is_absolute() {
return false;
}
let norm = trim.replace('\\', "/");
let norm = norm.trim_start_matches("./");
norm == UBLX_NAMES.local_config_visible_toml || norm == UBLX_NAMES.local_config_hidden_toml
}