use std::collections::HashMap;

use once_cell::sync::Lazy;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct Browser {
    pub paths: Vec<String>,
    pub channels: Option<Vec<String>>,
    pub unix_crypt_name: Option<String>,
    pub osx_key_service: Option<String>,
    pub osx_key_user: Option<String>,
}

pub type BrowsersMap = HashMap<String, Browser>;

#[derive(Debug, Serialize, Deserialize)]
pub struct Config {
    pub version: String,
    pub platforms: HashMap<String, BrowsersMap>,
}

pub static CONFIG: Lazy<Config> =
    Lazy::new(|| serde_json::from_str(include_str!("../config.json")).unwrap());

#[allow(clippy::unnecessary_to_owned)]
pub fn get_browser_config(name: &str) -> &Browser {
    let platform = if cfg!(windows) {
        "windows"
    } else if cfg!(target_os = "macos") {
        "macos"
    } else {
        "linux"
    };
    let config = CONFIG
        .platforms
        .get(platform)
        .unwrap()
        .get(name)
        .unwrap()
        .to_owned();
    config
}
