Skip to content
use std::path::{Path, PathBuf};

use crate::task::Task;

pub fn data_dir() -> PathBuf {
    let mut path = if let Some(data) = std::env::var_os("XDG_DATA_HOME") {
        PathBuf::from(data)
    } else if let Some(home) = std::env::var_os("HOME") {
        PathBuf::from(home).join(".local/share")
    } else {
        PathBuf::from(".")
    };
    path.push("hyperfocus");
    let _ = std::fs::create_dir_all(&path);
    path
}

fn data_file(dir: &Path) -> PathBuf {
    dir.join("tasks.json")
}

pub fn load_tasks(dir: &Path) -> Vec<Task> {
    let path = data_file(dir);
    match std::fs::read_to_string(&path) {
        Ok(contents) => serde_json::from_str(&contents).unwrap_or_default(),
        Err(_) => Vec::new(),
    }
}

pub fn save_tasks(dir: &Path, tasks: &[Task]) {
    let path = data_file(dir);
    if let Ok(json) = serde_json::to_string_pretty(tasks) {
        let _ = std::fs::write(path, json);
    }
}