/**
 * Returns the user's locale
 */
export function getLocale(): string {
	return document.documentElement.dataset.locale || 'en'
}

/**
 * Returns user's locale in canonical form
 * E.g. `en-US` instead of `en_US`
 */
export function getCanonicalLocale(): string {
	return getLocale().replace(/_/g, '-')
}

/**
 * Returns the user's language
 */
export function getLanguage(): string {
	return document.documentElement.lang || 'en'
}

/**
 * Check whether the current, or a given, language is read right-to-left
 *
 * @param language Language code to check, defaults to current language
 */
export function isRTL(language?: string): boolean {
	const languageCode = language || getLanguage()

	// Source: https://meta.wikimedia.org/wiki/Template:List_of_language_names_ordered_by_code
	const rtlLanguages = [
		/* eslint-disable no-multi-spaces */
		'ae',  // Avestan
		'ar',  // 'العربية', Arabic
		'arc', // Aramaic
		'arz', // 'مصرى', Egyptian
		'bcc', // 'بلوچی مکرانی', Southern Balochi
		'bqi', // 'بختياري', Bakthiari
		'ckb', // 'Soranî / کوردی', Sorani
		'dv',  // Dhivehi
		'fa',  // 'فارسی', Persian
		'glk', // 'گیلکی', Gilaki
		'ha',  // 'هَوُسَ', Hausa
		'he',  // 'עברית', Hebrew
		'khw', // 'کھوار', Khowar
		'ks',  // 'कॉशुर / کٲشُر', Kashmiri
		'ku',  // 'Kurdî / كوردی', Kurdish
		'mzn', // 'مازِرونی', Mazanderani
		'nqo', // 'ߒߞߏ', N’Ko
		'pnb', // 'پنجابی', Western Punjabi
		'ps',  // 'پښتو', Pashto,
		'sd',  // 'سنڌي', Sindhi
		'ug',  // 'Uyghurche / ئۇيغۇرچە', Uyghur
		'ur',  // 'اردو', Urdu
		'uzs', // 'اوزبیکی', Uzbek Afghan
		'yi',  // 'ייִדיש', Yiddish
		/* eslint-enable no-multi-spaces */
	]

	// special case for Uzbek Afghan
	if ((language || getCanonicalLocale()).startsWith('uz-AF')) {
		return true
	}

	return rtlLanguages.includes(languageCode)
}

export function getBrowserLocale(options?: { languageCodeOnly: boolean }): string {
	const navigatorLocale = navigator.languages !== undefined
	  ? navigator.languages[0]
	  : navigator.language;
  
	if (!navigatorLocale) {
	  return 'en'; // Fallback to 'en' if no locale is detected
	}
  
	const locale = options?.languageCodeOnly
	  ? navigatorLocale.trim().split(/-|_/)[0]
	  : navigatorLocale.trim();
  
	return locale;
  }
