use std::{collections::HashMap, sync::RwLock};
use hikari_palette::*;
type ThemeRegistry = HashMap<String, Palette>;
static THEME_REGISTRY: once_cell::sync::Lazy<RwLock<ThemeRegistry>> =
once_cell::sync::Lazy::new(|| {
let mut registry = ThemeRegistry::new();
registry.insert("hikari".to_string(), Hikari::palette());
registry.insert("tairitsu".to_string(), Tairitsu::palette());
RwLock::new(registry)
});
pub fn register_theme(name: &str, palette: Palette) {
let mut registry = THEME_REGISTRY
.write()
.expect("Failed to acquire write lock on theme registry - rwlock poisoned");
registry.insert(name.to_string(), palette);
}
pub fn get_registered_theme(name: &str) -> Option<Palette> {
let registry = THEME_REGISTRY
.read()
.expect("Failed to acquire read lock on theme registry - rwlock poisoned");
registry.get(name).cloned()
}
pub fn get_default_theme() -> &'static str {
if crate::platform::prefers_dark_mode() {
"tairitsu"
} else {
"hikari"
}
}
pub fn prefers_dark_mode() -> bool {
crate::platform::prefers_dark_mode()
}