/**
 * Thin wrapper around localStorage.getItem(). Parses JSON and returns undefined if the value
 * is not set yet.
 */
export function getLocal(key, fallback = undefined) {
  const itemRaw = localStorage.getItem(key);
  return itemRaw === null ? fallback : JSON.parse(itemRaw);
}

/**
 * Thin wrapper around localStorage.setItem(). Converts value to JSON.
 */
export function setLocal(key, value) {
  localStorage.setItem(key, JSON.stringify(value));
}

/**
 * Thin wrapper around localStorage.getItem(). Parses JSON and returns undefined if the value
 * is not set yet.
 */
export function getSession(key, fallback = undefined) {
  const itemRaw = sessionStorage.getItem(key);
  return itemRaw === null ? fallback : JSON.parse(itemRaw);
}

/**
 * Thin wrapper around localStorage.setItem(). Converts value to JSON.
 */
export function setSession(key, value) {
  sessionStorage.setItem(key, JSON.stringify(value));
}

/**
 * This file contains the function to resolve a 2-letter country code
 * to the language name in both english and the local language.
 */
export function resLang(uLang) {
  this.langs = {
    aa: ["Afar", "Afar"],
    ab: ["Abkhazian", "Аҧсуа"],
    af: ["Afrikaans", "Afrikaans"],
    ak: ["Akan", "Akana"],
    am: ["Amharic", "አማርኛ"],
    an: ["Aragonese", "Aragonés"],
    ar: ["Arabic", "العربية"],
    as: ["Assamese", "অসমীয়া"],
    av: ["Avar", "Авар"],
    ay: ["Aymara", "Aymar"],
    az: ["Azerbaijani", "Azərbaycanca / آذربايجان"],
    ba: ["Bashkir", "Башҡорт"],
    be: ["Belarusian", "Беларуская"],
    bg: ["Bulgarian", "Български"],
    bh: ["Bihari", "भोजपुरी"],
    bi: ["Bislama", "Bislama"],
    bm: ["Bambara", "Bamanankan"],
    bn: ["Bengali", "বাংলা"],
    bo: ["Tibetan", "བོད་ཡིག / Bod skad"],
    br: ["Breton", "Brezhoneg"],
    bs: ["Bosnian", "Bosanski"],
    ca: ["Catalan", "Català"],
    ce: ["Chechen", "Нохчийн"],
    ch: ["Chamorro", "Chamoru"],
    co: ["Corsican", "Corsu"],
    cr: ["Cree", "Nehiyaw"],
    cs: ["Czech", "Česky"],
    cu: ["Old Church Slavonic / Old Bulgarian", "словѣньскъ / slověnĭskŭ"],
    cv: ["Chuvash", "Чăваш"],
    cy: ["Welsh", "Cymraeg"],
    da: ["Danish", "Dansk"],
    de: ["German", "Deutsch"],
    dv: ["Divehi", "ދިވެހިބަސް"],
    dz: ["Dzongkha", "ཇོང་ཁ"],
    ee: ["Ewe", "Ɛʋɛ"],
    el: ["Greek", "Ελληνικά"],
    en: ["English", "English"],
    eo: ["Esperanto", "Esperanto"],
    es: ["Spanish", "Español"],
    et: ["Estonian", "Eesti"],
    eu: ["Basque", "Euskara"],
    fa: ["Persian", "فارسی"],
    ff: ["Peul", "Fulfulde"],
    fi: ["Finnish", "Suomi"],
    fj: ["Fijian", "Na Vosa Vakaviti"],
    fo: ["Faroese", "Føroyskt"],
    fr: ["French", "Français"],
    fy: ["West Frisian", "Frysk"],
    ga: ["Irish", "Gaeilge"],
    gd: ["Scottish Gaelic", "Gàidhlig"],
    gl: ["Galician", "Galego"],
    gn: ["Guarani", "Avañe'ẽ"],
    gu: ["Gujarati", "ગુજરાતી"],
    gv: ["Manx", "Gaelg"],
    ha: ["Hausa", "هَوُسَ"],
    he: ["Hebrew", "עברית"],
    hi: ["Hindi", "हिन्दी"],
    ho: ["Hiri Motu", "Hiri Motu"],
    hr: ["Croatian", "Hrvatski"],
    ht: ["Haitian", "Krèyol ayisyen"],
    hu: ["Hungarian", "Magyar"],
    hy: ["Armenian", "Հայերեն"],
    hz: ["Herero", "Otsiherero"],
    ia: ["Interlingua", "Interlingua"],
    id: ["Indonesian", "Bahasa Indonesia"],
    ie: ["Interlingue", "Interlingue"],
    ig: ["Igbo", "Igbo"],
    ii: ["Sichuan Yi", "ꆇꉙ / 四川彝语"],
    ik: ["Inupiak", "Iñupiak"],
    io: ["Ido", "Ido"],
    is: ["Icelandic", "Íslenska"],
    it: ["Italian", "Italiano"],
    iu: ["Inuktitut", "ᐃᓄᒃᑎᑐᑦ"],
    ja: ["Japanese", "日本語"],
    jv: ["Javanese", "Basa Jawa"],
    ka: ["Georgian", "ქართული"],
    kg: ["Kongo", "KiKongo"],
    ki: ["Kikuyu", "Gĩkũyũ"],
    kj: ["Kuanyama", "Kuanyama"],
    kk: ["Kazakh", "Қазақша"],
    kl: ["Greenlandic", "Kalaallisut"],
    km: ["Cambodian", "ភាសាខ្មែរ"],
    kn: ["Kannada", "ಕನ್ನಡ"],
    ko: ["Korean", "한국어"],
    kr: ["Kanuri", "Kanuri"],
    ks: ["Kashmiri", "कश्मीरी / كشميري"],
    ku: ["Kurdish", "Kurdî / كوردی"],
    kv: ["Komi", "Коми"],
    kw: ["Cornish", "Kernewek"],
    ky: ["Kirghiz", "Kırgızca / Кыргызча"],
    la: ["Latin", "Latina"],
    lb: ["Luxembourgish", "Lëtzebuergesch"],
    lg: ["Ganda", "Luganda"],
    li: ["Limburgian", "Limburgs"],
    ln: ["Lingala", "Lingála"],
    lo: ["Laotian", "ລາວ / Pha xa lao"],
    lt: ["Lithuanian", "Lietuvių"],
    lv: ["Latvian", "Latviešu"],
    mg: ["Malagasy", "Malagasy"],
    mh: ["Marshallese", "Kajin Majel / Ebon"],
    mi: ["Maori", "Māori"],
    mk: ["Macedonian", "Македонски"],
    ml: ["Malayalam", "മലയാളം"],
    mn: ["Mongolian", "Монгол"],
    mo: ["Moldovan", "Moldovenească"],
    mr: ["Marathi", "मराठी"],
    ms: ["Malay", "Bahasa Melayu"],
    mt: ["Maltese", "bil-Malti"],
    my: ["Burmese", "Myanmasa"],
    na: ["Nauruan", "Dorerin Naoero"],
    nd: ["North Ndebele", "Sindebele"],
    ne: ["Nepali", "नेपाली"],
    ng: ["Ndonga", "Oshiwambo"],
    nl: ["Dutch", "Nederlands"],
    nn: ["Norwegian Nynorsk", "Norsk (nynorsk)"],
    no: ["Norwegian", "Norsk (bokmål / riksmål)"],
    nr: ["South Ndebele", "isiNdebele"],
    nv: ["Navajo", "Diné bizaad"],
    ny: ["Chichewa", "Chi-Chewa"],
    oc: ["Occitan", "Occitan"],
    oj: ["Ojibwa", "ᐊᓂᔑᓈᐯᒧᐎᓐ / Anishinaabemowin"],
    om: ["Oromo", "Oromoo"],
    or: ["Oriya", "ଓଡ଼ିଆ"],
    os: ["Ossetian / Ossetic", "Иронау"],
    pa: ["Panjabi / Punjabi", "ਪੰਜਾਬੀ / पंजाबी / پنجابي"],
    pi: ["Pali", "Pāli / पाऴि"],
    pl: ["Polish", "Polski"],
    ps: ["Pashto", "پښتو"],
    pt: ["Portuguese", "Português"],
    qu: ["Quechua", "Runa Simi"],
    rm: ["Raeto Romance", "Rumantsch"],
    rn: ["Kirundi", "Kirundi"],
    ro: ["Romanian", "Română"],
    ru: ["Russian", "Русский"],
    rw: ["Rwandi", "Kinyarwandi"],
    sa: ["Sanskrit", "संस्कृतम्"],
    sc: ["Sardinian", "Sardu"],
    sd: ["Sindhi", "सिनधि"],
    se: ["Northern Sami", "Sámegiella"],
    sg: ["Sango", "Sängö"],
    sh: ["Serbo-Croatian", "Srpskohrvatski / Српскохрватски"],
    si: ["Sinhalese", "සිංහල"],
    sk: ["Slovak", "Slovenčina"],
    sl: ["Slovenian", "Slovenščina"],
    sm: ["Samoan", "Gagana Samoa"],
    sn: ["Shona", "chiShona"],
    so: ["Somalia", "Soomaaliga"],
    sq: ["Albanian", "Shqip"],
    sr: ["Serbian", "Српски"],
    ss: ["Swati", "SiSwati"],
    st: ["Southern Sotho", "Sesotho"],
    su: ["Sundanese", "Basa Sunda"],
    sv: ["Swedish", "Svenska"],
    sw: ["Swahili", "Kiswahili"],
    ta: ["Tamil", "தமிழ்"],
    te: ["Telugu", "తెలుగు"],
    tg: ["Tajik", "Тоҷикӣ"],
    th: ["Thai", "ไทย / Phasa Thai"],
    ti: ["Tigrinya", "ትግርኛ"],
    tk: ["Turkmen", "Туркмен / تركمن"],
    tl: ["Tagalog / Filipino", "Tagalog"],
    tn: ["Tswana", "Setswana"],
    to: ["Tonga", "Lea Faka-Tonga"],
    tr: ["Turkish", "Türkçe"],
    ts: ["Tsonga", "Xitsonga"],
    tt: ["Tatar", "Tatarça"],
    tw: ["Twi", "Twi"],
    ty: ["Tahitian", "Reo Mā`ohi"],
    ug: ["Uyghur", "Uyƣurqə / ئۇيغۇرچە"],
    uk: ["Ukrainian", "Українська"],
    ur: ["Urdu", "اردو"],
    uz: ["Uzbek", "Ўзбек"],
    ve: ["Venda", "Tshivenḓa"],
    vi: ["Vietnamese", "Tiếng Việt"],
    vo: ["Volapük", "Volapük"],
    wa: ["Walloon", "Walon"],
    wo: ["Wolof", "Wollof"],
    xh: ["Xhosa", "isiXhosa"],
    yi: ["Yiddish", "ייִדיש"],
    yo: ["Yoruba", "Yorùbá"],
    za: ["Zhuang", "Cuengh / Tôô / 壮语"],
    zh: ["Chinese", "中文"],
    zu: ["Zulu", "isiZulu"],
  };
  this.lang = uLang.substring(0, 2);
  return `${this.langs[this.lang][0]} (${this.langs[this.lang][1]})`;
}