use std::ffi::OsStr;
use std::sync::OnceLock;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum AppProfile {
Default,
Dev,
}
static PROFILE: OnceLock<AppProfile> = OnceLock::new();
pub fn set(profile: AppProfile) {
let _ = PROFILE.set(profile);
}
#[must_use]
pub fn current() -> AppProfile {
*PROFILE.get_or_init(detect_profile)
}
#[must_use]
pub fn app_dir_slug() -> &'static str {
match current() {
AppProfile::Default => "blz",
AppProfile::Dev => "blz-dev",
}
}
#[must_use]
pub fn dot_dir_slug() -> &'static str {
match current() {
AppProfile::Default => ".blz",
AppProfile::Dev => ".blz-dev",
}
}
fn detect_profile() -> AppProfile {
if let Ok(value) = std::env::var("BLZ_PROFILE") {
if value.eq_ignore_ascii_case("dev") {
return AppProfile::Dev;
}
}
if let Ok(exe) = std::env::current_exe() {
if let Some(name) = exe.file_name().and_then(OsStr::to_str) {
if name.contains("blz-dev") {
return AppProfile::Dev;
}
}
}
AppProfile::Default
}