use std::collections::HashMap;
use std::path::PathBuf;

#[derive(Clone, Debug)]
pub struct AppConfig {
    pub repo_path: PathBuf,
}

#[derive(Clone, Debug, Default)]
pub struct LogEntry {
    pub change_id: String,
    pub change_id_prefix: String,
    pub change_id_rest: String,
    pub commit_id: String,
    pub date: String,
    pub author: String,
    pub description: String,
    pub bookmarks: Vec<String>,
    pub graph_lines: Vec<String>,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Focus {
    Log,
    Diff,
}

#[derive(Clone, Debug)]
pub enum LoadState<T> {
    Loading,
    Ready(T),
    Error(String),
}

#[derive(Clone, Debug, Default)]
pub struct DiffCache {
    pub entries: HashMap<String, LoadState<Vec<String>>>,
}

impl DiffCache {
    pub fn get(&self, change_id: &str) -> Option<&LoadState<Vec<String>>> {
        self.entries.get(change_id)
    }

    pub fn insert(&mut self, change_id: String, state: LoadState<Vec<String>>) {
        self.entries.insert(change_id, state);
    }
}
