use crate::models::config::ColorScheme;
use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
use std::path::Path;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CcboardPreferences {
pub color_scheme: ColorScheme,
}
impl Default for CcboardPreferences {
fn default() -> Self {
Self {
color_scheme: ColorScheme::Dark,
}
}
}
impl CcboardPreferences {
pub fn load(cache_dir: &Path) -> Self {
let path = cache_dir.join("ccboard-preferences.json");
match std::fs::read_to_string(&path) {
Ok(content) => serde_json::from_str(&content).unwrap_or_default(),
Err(_) => Self::default(),
}
}
pub fn save(&self, cache_dir: &Path) -> Result<()> {
std::fs::create_dir_all(cache_dir)
.context("Failed to create cache directory for preferences")?;
let path = cache_dir.join("ccboard-preferences.json");
let content =
serde_json::to_string_pretty(self).context("Failed to serialize preferences")?;
std::fs::write(&path, content)
.with_context(|| format!("Failed to write preferences to {}", path.display()))
}
}