package in.slanglabs;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import java.util.Locale;

import in.slanglabs.platform.SlangLocale;

public class RNSlangLocaleMap {
    private static Locale localeHelper(String locale) {

        if (locale == null || locale.length() < 5) {
            return null;
        }

        Set<String> ISO_LANGUAGES = new HashSet<>(Arrays.asList(Locale.getISOLanguages()));
        Set<String> ISO_COUNTRIES = new HashSet<>(Arrays.asList(Locale.getISOCountries()));
        String languageCode = locale.substring(0,2);
        String countryCode = locale.substring(locale.length()-2);

        if (ISO_LANGUAGES.contains(languageCode) && ISO_COUNTRIES.contains(countryCode))
            return new Locale(languageCode, countryCode);

        return null;
    }


    public static Set<Locale> getRequestedLocales(List<String> locales) {
        Set<Locale> requestedLocales = new HashSet();
        if (null != locales && locales.size() > 0) {
            for (String locale : locales) {
                Locale selectedLocale = localeHelper(locale);
                if (selectedLocale != null)
                    requestedLocales.add(selectedLocale);
            }
        }

        return requestedLocales;
    }

    public static Locale getLocale(String lang) {
        return localeHelper(lang);
    }

    public static Locale getDefaultLocale(String lang) {
        Locale selectedLocale = localeHelper(lang);
        if (selectedLocale != null)
            return selectedLocale;
        return SlangLocale.LOCALE_ENGLISH_IN;
    }
}
