<?php

namespace WPProofShield\Support;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

final class UiLanguage {

	public const DEFAULT = 'de';

	public static function options(): array {
		return array(
			'de' => 'DE Deutsch',
			'en' => 'EN English',
			'es' => 'ES Español',
			'ru' => 'RU Русский',
			'fr' => 'FR Français',
			'pt' => 'PT Português',
			'it' => 'IT Italiano',
			'nl' => 'NL Nederlands',
			'pl' => 'PL Polski',
			'tr' => 'TR Türkçe',
			'ja' => 'JA 日本語',
			'zh' => 'ZH 中文',
		);
	}

	public static function normalize( string $language ): string {
		$language = strtolower( trim( $language ) );
		return array_key_exists( $language, self::options() ) ? $language : self::DEFAULT;
	}

	public static function current( Settings $settings ): string {
		return self::normalize( (string) $settings->get( 'ui_language', self::DEFAULT ) );
	}

	public static function powMessages( string $language ): array {
		$language = self::normalize( $language );
		$messages = self::powMessagesAll();
		return $messages[ $language ] ?? $messages[ self::DEFAULT ];
	}

	public static function statsMessages( string $language ): array {
		$language = self::normalize( $language );
		$messages = self::statsMessagesAll();
		return $messages[ $language ] ?? $messages[ self::DEFAULT ];
	}

	private static function powMessagesAll(): array {
		return array(
			'de' => array(
				'working'          => 'Sicherheitsprüfung läuft im Hintergrund...',
				'challenge_error'  => 'Challenge konnte nicht geladen werden.',
				'solve_retry'      => 'Prüfung nicht gelöst. Bitte erneut absenden.',
				'solve_retry_hard' => 'Prüfung aktuell sehr streng. Bitte Refresh-Symbol nutzen.',
				'solve_reload'     => 'Prüfung fehlgeschlagen. Bitte neu laden.',
				'btn_retry'        => 'Erneut versuchen',
				'btn_refresh'      => 'Neu laden',
				'difficulty_now'   => 'Schwierigkeit',
				'refresh_relief'   => 'Refresh-Entlastung aktiv',
				'solved'           => 'Geschützt. Nachweis erstellt in %d ms.',
				'preflight'        => '%s: Prüfung wird beim Ausfüllen vorbereitet.',
				'ctx_login'        => 'Login',
				'ctx_comment'      => 'Kommentar',
				'ctx_form'         => 'Formular',
			),
			'en' => array(
				'working'          => 'Security check running in the background...',
				'challenge_error'  => 'Failed to load challenge.',
				'solve_retry'      => 'Verification not solved. Please submit again.',
				'solve_retry_hard' => 'Verification is currently strict. Please use the refresh icon.',
				'solve_reload'     => 'Verification failed. Please reload.',
				'btn_retry'        => 'Try again',
				'btn_refresh'      => 'Refresh',
				'difficulty_now'   => 'Difficulty',
				'refresh_relief'   => 'Refresh relief active',
				'solved'           => 'Protected. Proof created in %d ms.',
				'preflight'        => '%s: verification starts when filling the form.',
				'ctx_login'        => 'Login',
				'ctx_comment'      => 'Comment',
				'ctx_form'         => 'Form',
			),
			'es' => array(
				'working'          => 'La verificacion de seguridad se ejecuta en segundo plano...',
				'challenge_error'  => 'No se pudo cargar el desafio.',
				'solve_retry'      => 'Verificacion no resuelta. Vuelve a enviar.',
				'solve_retry_hard' => 'Verificacion en modo estricto. Usa el icono de recarga.',
				'solve_reload'     => 'La verificacion fallo. Recarga la pagina.',
				'btn_retry'        => 'Intentar de nuevo',
				'btn_refresh'      => 'Recargar',
				'difficulty_now'   => 'Dificultad',
				'refresh_relief'   => 'Alivio de recarga activo',
				'solved'           => 'Protegido. Prueba creada en %d ms.',
				'preflight'        => '%s: la verificacion se prepara durante el llenado.',
				'ctx_login'        => 'Inicio de sesion',
				'ctx_comment'      => 'Comentario',
				'ctx_form'         => 'Formulario',
			),
			'ru' => array(
				'working'          => 'Proverka bezopasnosti vypolnyaetsya v fone...',
				'challenge_error'  => 'Ne udalos zagruzit challenge.',
				'solve_retry'      => 'Proverka ne reshenа. Otpravte eshche raz.',
				'solve_retry_hard' => 'Strogaya proverka aktivna. Ispolzuyte ikonku obnovleniya.',
				'solve_reload'     => 'Proverka ne udalas. Obnovite stranicu.',
				'btn_retry'        => 'Povtorit',
				'btn_refresh'      => 'Obnovit',
				'difficulty_now'   => 'Slozhnost',
				'refresh_relief'   => 'Oblegchenie pri obnovlenii aktivno',
				'solved'           => 'Zashchishcheno. Dokazatelstvo sozdano za %d ms.',
				'preflight'        => '%s: proverka gotovitsya vo vremya zapolneniya.',
				'ctx_login'        => 'Vkhod',
				'ctx_comment'      => 'Kommentariy',
				'ctx_form'         => 'Forma',
			),
			'fr' => array(
				'working'          => 'Verification de securite en cours en arriere-plan...',
				'challenge_error'  => 'Impossible de charger le challenge.',
				'solve_retry'      => 'Verification non resolue. Renvoyez le formulaire.',
				'solve_retry_hard' => 'Verification stricte active. Utilisez licone de rafraichissement.',
				'solve_reload'     => 'Echec de verification. Rechargez la page.',
				'btn_retry'        => 'Reessayer',
				'btn_refresh'      => 'Rafraichir',
				'difficulty_now'   => 'Difficulte',
				'refresh_relief'   => 'Ajustement de rafraichissement actif',
				'solved'           => 'Protege. Preuve creee en %d ms.',
				'preflight'        => '%s: verification preparee pendant la saisie.',
				'ctx_login'        => 'Connexion',
				'ctx_comment'      => 'Commentaire',
				'ctx_form'         => 'Formulaire',
			),
			'pt' => array(
				'working'          => 'Verificacao de seguranca em execucao em segundo plano...',
				'challenge_error'  => 'Nao foi possivel carregar o desafio.',
				'solve_retry'      => 'Verificacao nao resolvida. Envie novamente.',
				'solve_retry_hard' => 'Verificacao estrita ativa. Use o icone de atualizar.',
				'solve_reload'     => 'Falha na verificacao. Recarregue a pagina.',
				'btn_retry'        => 'Tentar novamente',
				'btn_refresh'      => 'Atualizar',
				'difficulty_now'   => 'Dificuldade',
				'refresh_relief'   => 'Alivio de recarga ativo',
				'solved'           => 'Protegido. Prova criada em %d ms.',
				'preflight'        => '%s: verificacao preparada durante o preenchimento.',
				'ctx_login'        => 'Login',
				'ctx_comment'      => 'Comentario',
				'ctx_form'         => 'Formulario',
			),
			'it' => array(
				'working'          => 'Controllo di sicurezza in esecuzione in background...',
				'challenge_error'  => 'Impossibile caricare la challenge.',
				'solve_retry'      => 'Verifica non risolta. Invia di nuovo.',
				'solve_retry_hard' => 'Verifica rigida attiva. Usa licona di aggiornamento.',
				'solve_reload'     => 'Verifica non riuscita. Ricarica la pagina.',
				'btn_retry'        => 'Riprova',
				'btn_refresh'      => 'Aggiorna',
				'difficulty_now'   => 'Difficolta',
				'refresh_relief'   => 'Alleggerimento refresh attivo',
				'solved'           => 'Protetto. Prova creata in %d ms.',
				'preflight'        => '%s: verifica preparata durante la compilazione.',
				'ctx_login'        => 'Accesso',
				'ctx_comment'      => 'Commento',
				'ctx_form'         => 'Modulo',
			),
			'nl' => array(
				'working'          => 'Beveiligingscontrole draait op de achtergrond...',
				'challenge_error'  => 'Challenge kon niet worden geladen.',
				'solve_retry'      => 'Verificatie niet opgelost. Verstuur opnieuw.',
				'solve_retry_hard' => 'Strikte verificatie actief. Gebruik het vernieuw-icoon.',
				'solve_reload'     => 'Verificatie mislukt. Herlaad de pagina.',
				'btn_retry'        => 'Opnieuw proberen',
				'btn_refresh'      => 'Vernieuwen',
				'difficulty_now'   => 'Moeilijkheid',
				'refresh_relief'   => 'Refresh-verlichting actief',
				'solved'           => 'Beschermd. Bewijs gemaakt in %d ms.',
				'preflight'        => '%s: verificatie wordt voorbereid tijdens invullen.',
				'ctx_login'        => 'Login',
				'ctx_comment'      => 'Reactie',
				'ctx_form'         => 'Formulier',
			),
			'pl' => array(
				'working'          => 'Kontrola bezpieczenstwa dziala w tle...',
				'challenge_error'  => 'Nie udalo sie zaladowac challenge.',
				'solve_retry'      => 'Weryfikacja nie zostala rozwiazana. Wyslij ponownie.',
				'solve_retry_hard' => 'Aktywna surowa weryfikacja. Uzyj ikony odswiezania.',
				'solve_reload'     => 'Weryfikacja nie powiodla sie. Odswiez strone.',
				'btn_retry'        => 'Sprobuj ponownie',
				'btn_refresh'      => 'Odswiez',
				'difficulty_now'   => 'Poziom trudnosci',
				'refresh_relief'   => 'Ulga odswiezania aktywna',
				'solved'           => 'Chronione. Dowod utworzony w %d ms.',
				'preflight'        => '%s: weryfikacja przygotowywana podczas wypelniania.',
				'ctx_login'        => 'Logowanie',
				'ctx_comment'      => 'Komentarz',
				'ctx_form'         => 'Formularz',
			),
			'tr' => array(
				'working'          => 'Guvenlik kontrolu arka planda calisiyor...',
				'challenge_error'  => 'Challenge yuklenemedi.',
				'solve_retry'      => 'Dogrulama cozulmedi. Lutfen tekrar gonderin.',
				'solve_retry_hard' => 'Siki dogrulama aktif. Yenile simgesini kullanin.',
				'solve_reload'     => 'Dogrulama basarisiz oldu. Sayfayi yenileyin.',
				'btn_retry'        => 'Tekrar dene',
				'btn_refresh'      => 'Yenile',
				'difficulty_now'   => 'Zorluk',
				'refresh_relief'   => 'Yenileme rahatlatmasi aktif',
				'solved'           => 'Korundu. Kanit %d ms icinde olusturuldu.',
				'preflight'        => '%s: dogrulama form doldurulurken hazirlanir.',
				'ctx_login'        => 'Giris',
				'ctx_comment'      => 'Yorum',
				'ctx_form'         => 'Form',
			),
			'ja' => array(
				'working'          => 'Securiti chekku o bakguraundo de jikkouchuu...',
				'challenge_error'  => 'Charenji no yomikomi ni shippai shimashita.',
				'solve_retry'      => 'Ninshou ga mikaiketsu desu. Mou ichido soushin shite kudasai.',
				'solve_retry_hard' => 'Kibishii ninshou mode desu. Refresh aikon o tsukatte kudasai.',
				'solve_reload'     => 'Ninshou ni shippai shimashita. Pegi o sairo-do shite kudasai.',
				'btn_retry'        => 'Mou ichido',
				'btn_refresh'      => 'Rifureshu',
				'difficulty_now'   => 'Nando',
				'refresh_relief'   => 'Refresh entlastung aktif',
				'solved'           => 'Hogo sareteimasu. Shoumei wa %d ms de sakusei.',
				'preflight'        => '%s: nyuryoku-chuu ni ninshou junbi o okonaimasu.',
				'ctx_login'        => 'Rogin',
				'ctx_comment'      => 'Komento',
				'ctx_form'         => 'Fomu',
			),
			'zh' => array(
				'working'          => 'Anquan yanzheng zhengzai houtai yunxing...',
				'challenge_error'  => 'Wufa jiazai challenge.',
				'solve_retry'      => 'Yanzheng wei wancheng, qing chongxin tijiao.',
				'solve_retry_hard' => 'Yange yanzheng yi qiyong. Qing shiyong shuaxin anniu.',
				'solve_reload'     => 'Yanzheng shibai, qing shuaxin yemian.',
				'btn_retry'        => 'Chongshi',
				'btn_refresh'      => 'Shuaxin',
				'difficulty_now'   => 'Nandu',
				'refresh_relief'   => 'Shuaxin huanjie yi qiyong',
				'solved'           => 'Yi baohu. Zhengming zai %d ms nei wancheng.',
				'preflight'        => '%s: yanzheng zai tianxie shiqian zhunbei.',
				'ctx_login'        => 'Denglu',
				'ctx_comment'      => 'Pinglun',
				'ctx_form'         => 'Biaodan',
			),
		);
	}

	private static function statsMessagesAll(): array {
		return array(
			'de' => array(
				'ip_tracking_disabled' => 'IP-Tracking ist deaktiviert.',
				'no_blocked'           => 'Keine geblockten Besucher im gewählten Zeitraum.',
				'no_ip_entries'        => 'Keine geblockten IP-Einträge im gewählten Zeitraum.',
				'blocked'              => 'Geblockt',
				'strict_mode'          => 'Strenge Schwierigkeit',
				'suspicious'           => 'Verdächtig',
				'unknown'              => 'Unbekannt',
				'unknown_approx'       => 'Unbekannt (approx)',
				'local_private'        => 'Lokal/Privat',
			),
			'en' => array(
				'ip_tracking_disabled' => 'IP tracking is disabled.',
				'no_blocked'           => 'No blocked visitors in the selected range.',
				'no_ip_entries'        => 'No blocked IP entries in the selected range.',
				'blocked'              => 'Blocked',
				'strict_mode'          => 'Strict difficulty',
				'suspicious'           => 'Suspicious',
				'unknown'              => 'Unknown',
				'unknown_approx'       => 'Unknown (approx)',
				'local_private'        => 'Local/Private',
			),
			'es' => array(
				'ip_tracking_disabled' => 'El seguimiento de IP esta desactivado.',
				'no_blocked'           => 'No hay visitantes bloqueados en el rango seleccionado.',
				'no_ip_entries'        => 'No hay entradas de IP bloqueadas en el rango seleccionado.',
				'blocked'              => 'Bloqueado',
				'strict_mode'          => 'Dificultad estricta',
				'suspicious'           => 'Sospechoso',
				'unknown'              => 'Desconocido',
				'unknown_approx'       => 'Desconocido (aprox)',
				'local_private'        => 'Local/Privada',
			),
			'ru' => array(
				'ip_tracking_disabled' => 'Otslezhivanie IP otklyucheno.',
				'no_blocked'           => 'V vybrannom periode net zablokirovannyh posetiteley.',
				'no_ip_entries'        => 'Net zapisey o zablokirovannyh IP za vybrannyy period.',
				'blocked'              => 'Zablokirovan',
				'strict_mode'          => 'Strogaya slozhnost',
				'suspicious'           => 'Podozritelno',
				'unknown'              => 'Neizvestno',
				'unknown_approx'       => 'Neizvestno (pribl.)',
				'local_private'        => 'Lokalnyy/Chastnyy',
			),
			'fr' => array(
				'ip_tracking_disabled' => 'Le suivi IP est desactive.',
				'no_blocked'           => 'Aucun visiteur bloque sur la periode selectionnee.',
				'no_ip_entries'        => 'Aucune entree IP bloquee sur la periode selectionnee.',
				'blocked'              => 'Bloque',
				'strict_mode'          => 'Difficulte stricte',
				'suspicious'           => 'Suspect',
				'unknown'              => 'Inconnu',
				'unknown_approx'       => 'Inconnu (approx)',
				'local_private'        => 'Local/Prive',
			),
			'pt' => array(
				'ip_tracking_disabled' => 'O rastreamento de IP esta desativado.',
				'no_blocked'           => 'Nao ha visitantes bloqueados no periodo selecionado.',
				'no_ip_entries'        => 'Nao ha entradas de IP bloqueadas no periodo selecionado.',
				'blocked'              => 'Bloqueado',
				'strict_mode'          => 'Dificuldade estrita',
				'suspicious'           => 'Suspeito',
				'unknown'              => 'Desconhecido',
				'unknown_approx'       => 'Desconhecido (aprox)',
				'local_private'        => 'Local/Privado',
			),
			'it' => array(
				'ip_tracking_disabled' => 'Il tracciamento IP e disattivato.',
				'no_blocked'           => 'Nessun visitatore bloccato nel periodo selezionato.',
				'no_ip_entries'        => 'Nessuna voce IP bloccata nel periodo selezionato.',
				'blocked'              => 'Bloccato',
				'strict_mode'          => 'Difficolta rigida',
				'suspicious'           => 'Sospetto',
				'unknown'              => 'Sconosciuto',
				'unknown_approx'       => 'Sconosciuto (approx)',
				'local_private'        => 'Locale/Privato',
			),
			'nl' => array(
				'ip_tracking_disabled' => 'IP-tracking is uitgeschakeld.',
				'no_blocked'           => 'Geen geblokkeerde bezoekers in de gekozen periode.',
				'no_ip_entries'        => 'Geen geblokkeerde IP-items in de gekozen periode.',
				'blocked'              => 'Geblokkeerd',
				'strict_mode'          => 'Strikte moeilijkheid',
				'suspicious'           => 'Verdacht',
				'unknown'              => 'Onbekend',
				'unknown_approx'       => 'Onbekend (approx)',
				'local_private'        => 'Lokaal/Prive',
			),
			'pl' => array(
				'ip_tracking_disabled' => 'Sledzenie IP jest wylaczone.',
				'no_blocked'           => 'Brak zablokowanych odwiedzajacych w wybranym okresie.',
				'no_ip_entries'        => 'Brak wpisow zablokowanych IP w wybranym okresie.',
				'blocked'              => 'Zablokowany',
				'strict_mode'          => 'Surowa trudnosc',
				'suspicious'           => 'Podejrzane',
				'unknown'              => 'Nieznane',
				'unknown_approx'       => 'Nieznane (approx)',
				'local_private'        => 'Lokalne/Prywatne',
			),
			'tr' => array(
				'ip_tracking_disabled' => 'IP izleme devre disi.',
				'no_blocked'           => 'Secilen aralikta engellenen ziyaretci yok.',
				'no_ip_entries'        => 'Secilen aralikta engellenen IP kaydi yok.',
				'blocked'              => 'Engellendi',
				'strict_mode'          => 'Siki zorluk',
				'suspicious'           => 'Supheli',
				'unknown'              => 'Bilinmiyor',
				'unknown_approx'       => 'Bilinmiyor (approx)',
				'local_private'        => 'Yerel/Ozel',
			),
			'ja' => array(
				'ip_tracking_disabled' => 'IP torakkingu wa mukou desu.',
				'no_blocked'           => 'Sentaku kikan ni burokku sareta houmonsha wa imasen.',
				'no_ip_entries'        => 'Sentaku kikan ni burokku sareta IP no kiroku wa arimasen.',
				'blocked'              => 'Burokku',
				'strict_mode'          => 'Koudo na nando',
				'suspicious'           => 'Ayashii',
				'unknown'              => 'Fumei',
				'unknown_approx'       => 'Fumei (gaisan)',
				'local_private'        => 'Rokaru/Puraibeto',
			),
			'zh' => array(
				'ip_tracking_disabled' => 'IP genzong yi jinyong.',
				'no_blocked'           => 'Suo xuan shijian nei meiyou bei zulan de fangke.',
				'no_ip_entries'        => 'Suo xuan shijian nei meiyou bei zulan de IP jilu.',
				'blocked'              => 'Yi zulan',
				'strict_mode'          => 'Yange nandu',
				'suspicious'           => 'Keyi',
				'unknown'              => 'Weizhi',
				'unknown_approx'       => 'Weizhi (guji)',
				'local_private'        => 'Bendi/Siyou',
			),
		);
	}
}
