class Localization{

    // Idiomas validos
    static validLanguage = [ "en", "es", "es-cl", "ja", "fr", "it", "ru" ];
    static allowedCompoundLanguage = [ "es-cl" ];

    // Main
    static Main(){

        return {

            en: {
                description: "Play a high-octane version of rock, paper and scissors.",
                socialNetworks: "Check out the last updates",
                mediaPresskit: "Media & Press kit"
            },

            es: {
                description: "Juega una versión de alto octanaje de piedra, papel y tijeras.",
                socialNetworks: "Mira las últimas actualizaciones",
                mediaPresskit: "Media & Press kit"
            },

            "es-cl": {
                description: "Juega una versión de brígida del cachipún",
                socialNetworks: "Sapea las últimas nuevas",
                mediaPresskit: "Media & Press kit"
            },

            ja: {
                description: "じゃんけんの高オクタン価バージョンを再生します。",
                socialNetworks: "最後の更新をチェックしてください",
                mediaPresskit: "メディア＆プレスキット"
            },

            fr: {
                description: "Jouez à une version à indice d'octane élevé de pierre, de papier et de ciseaux.",
                socialNetworks: "Découvrez la dernière mise à jour",
                mediaPresskit: "Médias & dossier de presse"
            },

            it: {
                description: "Suona una versione ad alto numero di ottani di sasso, carta e forbici.",
                socialNetworks: "Scopri gli ultimi aggiornamenti",
                mediaPresskit: "Media e cartella stampa"
            },

            ru: {
                description: "Сыграйте в высокооктановую версию «камень, ножницы и бумага».",
                socialNetworks: "Ознакомьтесь с последними обновлениями",
                mediaPresskit: "СМИ и пресс-кит"
            },

            pt: {
                description: "Jogue uma versão de alta octanagem de Pedra, Papel e Tesoura.",
                socialNetworks: "Veja as últimas atualizações",
                mediaPresskit: "Mídia e kit de imprensa"
            },

        }

    }

    // Contact
    static Contact(){

        return {

            en: {
                description: "Do you have any questions? Feedback?",
                buttonEmail: "Send us an email"
            },

            es: {
                description: "¿Tienes preguntas? ¿Sugerencias?",
                buttonEmail: "Envía un email"
            },

            "es-cl": {
                description: "¿Alguna duda machucado? ¿Nos queri' saludar?",
                buttonEmail: "Manda un email"
            },

            ja: {
                description: "何か質問がありますか？ フィードバック？",
                buttonEmail: "私たちにメールを送って"
            },
            
            fr: {
                description: "Avez-vous des questions? Rétroaction?",
                buttonEmail: "Envoyez-nous un e-mail"
            },

            it: {
                description: "Avete domande? risposta?",
                buttonEmail: "Mandaci un email"
            },

            ru: {
                description: "У вас есть вопросы? отвечать?",
                buttonEmail: "Отправить нам письмо"
            },

            pt: {
                description: "Você tem alguma pergunta? Sugestões?",
                buttonEmail: "Enviar um email"
            },

        }

    }

    // Deeplink Room
    static DeeplinkRoom(){

        return {

            en: {
                room: "You were invited to play in the <i>{0}</i> room.",
                name: "Your name",
                checking: "Connecting...",
                join: "Join"
            },

            es: {
                room: "Te invitaron a jugar en la sala <i>{0}</i>",
                name: "Tu nombre",
                checking: "Conectando...",
                join: "Unirse"
            },

            "es-cl": {
                room: "Tay' invitao' a jugar en la sala <i>{0}</i>",
                name: "Tu nombre",
                checking: "Conectando...",
                join: "Unirse"
            },

            ja: {
                room: "あなたは「<i>{0}</i>」ルームでプレイするよう招待されました",
                name: "あなたの名前",
                checking: "接続する",
                join: "参加する"
            },
            
            fr: {
                room: "Vous avez été invité à jouer dans la salle <i>{0}</i>",
                name: "Votre nom",
                checking: "Collegamento...",
                join: "Joindre"
            },

            it: {
                room: "Sei stato invitato a suonare nella stanza <i>{0}</i>",
                name: "Il tuo nome",
                checking: "Connecting...",
                join: "Unisciti"
            },

            ru: {
                room: "Вас пригласили сыграть в комнате <i>{0}</i>",
                name: "Твое имя",
                checking: "Подключение...",
                join: "Присоединиться"
            },

            pt: {
                room: "Você foi convidado para jogar na sala <i>{0}</i>.",
                name: "Seu nome",
                checking: "Conectando...",
                join: "Entrar"
            },

        }

    }

    // Media
    static Media(){

        return {

            en: {
                titleDescription: "Description",
                titleImages: "Images",
                titleVideos: "Videos",
                titlePresskit: "Presskit",
                titleWallpapers: "Wallpapers",
                descriptionA: "Play rock, paper, and scissors while riding an elevator with no maximum floor.",
                descriptionB: "Single player: Unlock all characters, beat your records and get all the available achievements.",
                descriptionC: "Online Mode: Become the best player in the world or beat your friends in private tournaments."
            },

            es: {
                titleDescription: "Descripción",
                titleImages: "Imágenes",
                titleVideos: "Vídeos",
                titlePresskit: "Kit de prensa",
                titleWallpapers: "Fondos de pantalla",
                descriptionA: "Juega piedra, papel o tijeras mientras te montas en un ascensor sin piso máximo.",
                descriptionB: "Un jugador: Desbloquea todos los personajes, baté tus records y obtén todos los logros disponibles.",
                descriptionC: "Modo online: Conviértete en el mejor jugador del mundo o derrota a tus amigos en torneos privados."
            },

            "es-cl": {
                titleDescription: "Descripción",
                titleImages: "Imágenes",
                titleVideos: "Vídeos",
                titlePresskit: "Kit de prensa",
                titleWallpapers: "Fondos de pantalla",
                descriptionA: "Juega cachipun mientras te montas en un ascensor sin piso máximo.",
                descriptionB: "Un jugador: Desbloquea todos los personajes, baté tus records y obtén todos los logros disponibles.",
                descriptionC: "Modo online: Conviértete en el mejor jugador del mundo o derrota a tus amigos en torneos privados."
            },

            ja: {
                titleDescription: "説明",
                titleImages: "画像",
                titleVideos: "ビデオ",
                titlePresskit: "プレスキット",
                titleWallpapers: "背景",
                descriptionA: "最大床のないエレベーターに乗っている間、じゃんけんをします。 ",
                descriptionB: "シングルプレイヤー：すべてのキャラクターを取得し、記録を破り、可能な限りの素晴らしい実績を達成します。",
                descriptionC: "オンラインモード：世界最高のプレイヤーになるか、プライベートトーナメントで友達を倒してください。"
            },

            fr: {
                titleDescription: "La description",
                titleImages: "Images",
                titleVideos: "Vidéos",
                titlePresskit: "Dossier de presse",
                titleWallpapers: "Fonds d'écran",
                descriptionA: "Jouez à pierre, feuille, ciseaux tout en prenant un ascenseur sans étage maximum.",
                descriptionB: "Joueur unique : Débloquez tous les personnages, battez vos records et obtenez tous les succès disponibles.",
                descriptionC: "Mode en ligne : Devenez le meilleur joueur du monde ou battez vos amis dans des tournois privés."
            },

            it: {
                titleDescription: "Descrizione",
                titleImages: "Immagini",
                titleVideos: "Video",
                titlePresskit: "Cartella stampa",
                titleWallpapers: "Sfondi",
                descriptionA: "Gioca a sasso, carta, forbice mentre guidi un ascensore senza piano massimo.",
                descriptionB: "Giocatore singolo: Sblocca tutti i personaggi, batti i tuoi record e ottieni tutti i risultati disponibili.",
                descriptionC: "Modalità online: diventa il miglior giocatore del mondo o batti i tuoi amici in tornei privati."
            },

            ru: {
                titleDescription: "Описание",
                titleImages: "Картинки",
                titleVideos: "Видео",
                titlePresskit: "пресс-кит",
                titleWallpapers: "фоны",
                descriptionA: "Играйте в камень, ножницы и бумагу во время поездки на лифте без максимального этажа.",
                descriptionB: "Одиночная игра: разблокируйте всех персонажей, побейте свои рекорды и получите все доступные достижения.",
                descriptionC: "Сетевой режим: станьте лучшим игроком в мире или победите друзей в частных турнирах."
            },

            pt: {
                titleDescription: "Descrição",
                titleImages: "Imagens",
                titleVideos: "Videos",
                titlePresskit: "Kit de imprensa",
                titleWallpapers: "Fundos",
                descriptionA: "Jogue pedra, papel e tesoura enquanto anda de elevador sem andar máximo. ",
                descriptionB: "Jogador único: Obtenha todos os personagens, bata seus recordes e obtenha todas as conquistas disponíveis.",
                descriptionC: "Modo Online: Torne-se o melhor jogador do mundo ou derrote seus amigos em torneios privados."
            },

        }

    }

    // Solicitar un texto para incluir
    static GetTranslate( page, key, element, values ){
        
        let language = navigator.language.toLowerCase();

        // Permitiremos ciertos lenguajes con su codigo completo
        if( Localization.allowedCompoundLanguage.indexOf(language) == -1 ) language = language.split("-")[0];
        if( Localization.validLanguage.indexOf(language) == -1 ) language = Localization.validLanguage[0]; 
        
        let string = "";
        values = values? values.split(",") : [];
        const withArguments = values.length > 0;

        switch(page){

            case "main":
                string = Localization.Main()[language][ key ];
                break;
            case "contact":
                string = Localization.Contact()[language][ key ];
                break;
            case "deeplinkRoom":
                string = Localization.DeeplinkRoom()[language][ key ];
                break;
            case "media":
                string = Localization.Media()[language][ key ];
                break;
        }

        // Contiene argumentos para reemplazar
        if(withArguments){

            for(let i = 0; i < values.length; i++){
                string = string.replace(`{${i}}`, values[i]);
            }

        }
        
        if(string) element.innerHTML = string;

    }

}

// Procesar todas los textos que necesiten localizacion
const needLocalization = Array.from( document.querySelectorAll( "[data-localization-key]" ) );
for( const e of needLocalization ){
    Localization.GetTranslate(e.dataset.localizationPage, e.dataset.localizationKey, e, e.dataset.localizationArguments);
}