/**
 * @mergeTarget
 * @module Src/Controllers/Translations
 */

/**
 * Enumerator of all languages in which widget can be translated.\ Each language has a his proper file.
 * @source
 */
enum TranslationLanguages {
  /**
   * Arabic
   */
  AR = "ar",
  /**
   * German
   */
  DE = "de",
  /**
   * Spanish
   */
  ES = "es",
  /**
   * English
   */
  EN = "en",
  /**
   * French
   */
  FR = "fr",
  /**
   * Italian
   */
  IT = "it",
  /**
   * Dutch
   */
  NL = "nl",
  /**
   * Danish
   */
  DA = "da",
  /**
   * Polish
   */
  PL = "pl",
  /**
   * Portuguese
   */
  PT = "pt",
  /**
   * Romanian
   */
  RO = "ro",
  /**
   * Russian
   */
  RU = "ru",
  /**
   * Turkish
   */
  TR = "tr",
  /**
   * Ukrainian
   */
  UK = "uk",
  /**
   * Chinese
   */
  ZH_CN = "zh_cn",
  ZH = "zh",
  /**
   * Japanese
   */
  JA = "ja",
  /**
   * Catalan
   */
  CA = "ca",
  /**
   * Korean
   */
  KO = "ko",
  /**
   * Greek
   */
  EL = "el",
  /**
   * Welsh
   */
  CY = "cy",
  /**
   * Finnish
   */
  FI = "fi",
  /**
   * Norwegian
   */
  NO = "no",
  /**
   * Norwegian Bokmal
   */
  NB = "nb",
  /**
   * Hindi
   */
  HI = "hi",
  /**
   * Hebrew
   */
  HE = "he",
  /**
   * Thai
   */
  TH = "th",
  /**
   * Czech
   */
  CS = "cs",
  /**
   * Swedish
   */
  SV = "sv",
  /**
   * Luxembourgish
   */
  LB = "lb",
  /**
   * Yiddish
   */
  YI = "yi",
  /**
   * Vietnamese
   */
  VI = "vi",
  /**
   * Hungarian
   */
  HU = "hu",
  /**
   * Estonian
   */
  ET = "et",
  /**
   * Bulgarian
   */
  BG = "bg",
  /**
   * Pashto
   */
  PS = "ps",
  /**
   * Lithuanian
   */
  LT = "lt",
  /**
   * Latvian
   */
  LV = "lv",
  /**
   * Breton
   */
  BR = "br",
  /**
   * Occitan
   */
  OC = "oc",
  /**
   * Slovenian
   */
  SL = "sl",
  /**
   * Slovak
   */
  SK = "sk",
  /**
   * Corsican
   */
  CO = "co",
  /**
   * Basque
   */
  EU = "eu",
  /**
   * Indonesian
   */
  ID = "id",
  /**
   * AMERICAN ENGLISH
   */
  EN_US = "en_us",
  /**
   * ENGLISH
   */
  EN_GB = "en_gb",
  /**
   * PORTUGUES BRAZIL
   */
  PT_BR = "pt_br",
  /**
   * PORTUGUES portugal
   */
  PT_PT = "pt_pt",
  /**
   * PORTUGUES portugal
   */
  MFE = "mfe",
  /**
   * Default
   */
  DEFAULT = "default",
}

const rtlLangs = [
  TranslationLanguages.AR,
  TranslationLanguages.YI,
  TranslationLanguages.HE,
  TranslationLanguages.PS,
];

function getDirection(lang: TranslationLanguages): string {
  return rtlLangs.includes(lang) ? "rtl" : "ltr";
}

/**
 * Structure for translations files.\
 * Please use this formatting :
 *  * my-key-in-english : "My translation"
 */
type Translations = {
  [key: string]: string;
};

export { TranslationLanguages, getDirection };
export type { Translations };
