use std::collections::HashMap;
use lazy_static::lazy_static;
use leptos::*;
use crate::locales::Locales;

lazy_static! {
    static ref LANGUAGES: HashMap<&'static str, HashMap<&'static str, &'static str>> = {
        let m = HashMap::from([
            ("cs", HashMap::from( [
                ("Dashboard", "Přehled"),
                ("Settings", "Nastavení"),
                ("Search...", "Najít..."),
                ("Close", "Zavřít"),
                ("Save changes", "Uložit změny"),
                ("Yes", "Ano"),
                ("No", "Ne"),
                ("Company info", "Organizace"),
                ("Name cannot be empty", "Jméno nesmí být prázdné"),
                ("Invalid old password", "Neplatné staré heslo"),
                ("Please sign-in to your account", "Přihlaste se prosím k uživatelskému účtu"),
                ("Closed", "Zavřeno"),
                ("Monday", "Pondělí"),
                ("Tuesday", "Úterý"),
                ("Wednesday", "Středa"),
                ("Thursday", "Čtvrtek"),
                ("Friday", "Pátek"),
                ("Saturday", "Sobota"),
                ("Sunday", "Neděle"),
                ("Opening hours", "Otvírací hodiny"),
                ("Username", "Uživatel"),
                ("Password", "Heslo"),
                ("Sign in", "Přihlásit"),
                ("Create user", "Vytvořit uživatele"),
                ("Delete user", "Smazat uživatele"),
                ("Users", "Uživatelé"),
                ("Full name", "Celé jméno"),
                ("Actions", "Akce"),
                ("Edit", "Upravit"),
                ("Change password", "Změnit heslo"),
                ("Delete", "Smazat"),
                ("Properties", "Předměty"),
                ("Name", "Jméno"),
                ("Description", "Popis"),
                ("Price", "Cena"),
                ("Edit hours", "Upravit hodiny"),
                ("Hours", "Hodiny"),
                ("Who is booking", "Kdo rezervuje"),
                ("Reservation", "Rezervace"),
                ("Booking", "Rezervace"),
                ("Enter full name", "Zdejte celé jméno"),
                ("Enter e-mail address", "Zadejte e-mailovou adresu"),
                ("Phone number", "Telefonní číslo"),
                ("Enter phone number", "Zadejte telefonní číslo"),
                ("Book", "Rezervovat"),
                ("Total price of booking", "Celková cena rezervace"),
                ("Date", "Datum"),
                ("Note", "Poznámka"),
                ("Enter note", "Zadejte poznámku"),
                ("New bookings", "Nové rezervace"),
                ("Next approved bookings", "Potvrzené rezervace"),
                ("Approve", "Potvrdit"),
                ("Cancel booking", "Zrušit rezervaci"),
                ("Approve booking", "Potvrdit rezervaci"),
                ("Reservation saved", "Rezervace byla uložena"),
                ("Cancel", "Zrušit"),
                ("Approve booking on ", "Potvrdit rezervaci na "),
                (" for ", " pro "),
                ("Cancel booking on ", "Zrušit rezervaci na "),
                ("Customer: ", "Zákazník: "),
                ("Price: ", "Cena: "),
                ("Note: ", "Poznámka: "),
                ("Overview", "Přehled"),
                ("Can't create reservation", "Rezervaci nelze vytvořit"),
                ("Enter your full name", "Zadejte své jméno"),
                ("Enter valid email address", "Zadejte platný e-mail"),
                ("Select at last one time slot", "Zvolte čas rezervace"),
                ("Enter your phone number", "Zadejte telefonní číslo"),
                ("Your reservation has been successfully saved.", "Vaše rezervace byla úspěšně uložena."),
                ("We look forward to seeing you on", "Těšíme se na vaši návštěvu"),
                ("Create booking", "Vytvořit rezervaci"),
                ("Online booking application for sports facilities and service providers.", "Online rezervační aplikace pro sportovní zařízení a provozovatele služeb."),
                ("About", "O aplikaci"),
                ("Booking summary", "Všechny rezervace"),
                ("Customers", "Zákazníci"),
                ("Customer", "Zákazník"),
                ("Booking overview", "Rezervace"),
                ("Base settings", "Základní nastavení"),
                ("Mail settings", "Nastavení e-mailů"),
                ("New booking", "Nová rezervace"),
                ("New booking - for customer", "Nová rezervace - zákazníkovi"),
                ("Booking approved", "Schválení rezervace"),
                ("Booking canceled", "Zrušení rezervace"),
                ("Subject", "Předmět"),
                ("Subject: ", "Předmět: "),
                ("Edit mail", "Upravit e-mail"),
                ("Year: ", "Rok: "),
                ("Month: ", "Měsíc: "),
                ("New", "Nová"),
                ("Approved", "Potvrzená"),
                ("Canceled", "Zrušená"),
                ("Booking detail", "Detail rezervace"),
                ("State", "Stav"),
                ("Date can't be in past", "Datum nesmí být v minulosti"),
                ("Enter your username", "Zadejte své uživatelské jméno"),
                ("Hours must be in HH:MM - HH:MM format", "Hodiny musí být zadány ve tvaru HH:MM - HH:MM"),
                ("Edit profile", "Upravit profil"),
                ("Get emails", "Dostávat e-maily"),
                ("Enter username", "Zadejte uživatelské jméno"),
                ("Verify password", "Ověření hesla"),
                ("Enter email", "Zadejte e-mail"),
                ("Old password", "Staré heslo"),
                ("New password", "Nové heslo"),
                ("Enter new password", "Zadejte nové heslo"),
                ("Passwords doesn't match", "Hesla se neshodují"),
                ("Edit company", "Upravit organizaci"),
                ("Enter Name", "Zadejte jméno"),
                ("Enter Street", "Zadejte ulici"),
                ("Enter House number", "Číslo domu"),
                ("Enter ZIP code", "Zadejte PSČ"),
                ("Enter City", "Zadejte město"),
                ("Street", "Ulice"),
                ("House number", "Číslo domu"),
                ("ZIP code", "PSČ"),
                ("City", "Město"),
                ("Edit property", "Upravit předmět"),
                ("Quarter an hour", "Čtvrthodna"),
                ("Half an hour", "Půlhodina"),
                ("Hour", "Hodina"),
                ("Day", "Den"),
                ("Time slot", "Časový slot"),
                ("Active", "Aktivní"),
                ("Are you sure you want to delete property ", "Opravdu chcete smazat předmět "),
                ("Delete property", "Smazat předmět"),
                ("Are you sure you want to delete user ", "Opravdu chcete smazat uživatele "),
                ("Remember for next time", "Zapamatovat pro příště"),
                ("Appearance settings", "Nastavení vzhledu"),
                ("Top banner", "Titulní banner"),
                ("Banner file", "Soubor banneru"),
                ("Upload", "Nahrát"),
                ("Edit title", "Upravit titulek"),
                ("Edit text", "Upravit text"),
                ("Update text", "Upravit text"),
                ("Update title", "Upravit titulek"),
                ("Are you sure you want to delete banner?", "Opravdu chcete smazat banner?"),
                ("Delete banner", "Smazat banner"),
                ("Appearance", "Vzhled"),
                ("Month bookings", "Rezrvace po měsících"),
                ("Year bookings", "Rezervace po letech"),
                ("January", "Leden"),
                ("February", "Únor"),
                ("March", "Březen"),
                ("April", "Duben"),
                ("May", "Květen"),
                ("June", "Červen"),
                ("July", "Červenec"),
                ("August", "Srpen"),
                ("September", "Září"),
                ("October", "Říjen"),
                ("November", "Listpopad"),
                ("December", "Prosinec"),
            ])),
            ("sk", HashMap::from( [
                ("Dashboard", "Prehlad"),
                ("Settings", "Nastavenie"),
                ("Search...", "Najsť...")
            ]))
        ]);
        m
    };
}

fn get_locales() -> Vec<Option<String>> {
    #[cfg(not(feature = "ssr"))]
    {
        use_context::<Locales>().unwrap_or(Locales(vec![])).0
    }
    #[cfg(feature = "ssr")]
    {
        use actix_web::HttpRequest;

        let req = use_context::<HttpRequest>();
        if let Some(r) = req {
            if let Some(al) = r.head().headers.get("accept-language") {
                Locales(al.to_str().unwrap_or("").split(",").map(|l| Some(l.to_string())).collect()).0
            } else {
                vec![]
            }
        } else {
            vec![]
        }
    }
}

pub fn get_dictionary() -> Option<&'static HashMap<&'static str, &'static str>> {
    let locs = get_locales();
    for loc in locs {
        if let Some(key) = loc {
            if let Some(k) = key.split("-").collect::<Vec<_>>().get(0) {
                if *k == "en" {
                    return None;
                }
                if !LANGUAGES.contains_key(*k) {
                    continue;
                }
                return LANGUAGES.get(*k);
            }
        }
    }

    None
}