import qs from 'querystring';
import { addLocaleData } from 'react-intl';

export default (({
  Locales = {},
  ReactIntlLocaleData = {}
}) => {
  const en = Locales['en-us'] || {};

  Object.keys(ReactIntlLocaleData).forEach((lang) => {
    addLocaleData(ReactIntlLocaleData[lang] || []);
  });

  // http://stackoverflow.com/a/38150585
  const detectedLocale = (
    qs.parse((document.location.search || '').replace(/^\?/, '')).locale ||
    (navigator.languages && navigator.languages[0]) || // Chrome / Firefox
    navigator.language ||   // All browsers
    navigator.userLanguage || // IE <= 10
    'en-US'
  ).toLowerCase();

  const lang = detectedLocale.split(/-/)[0];
  const locale = ReactIntlLocaleData[lang]
    ? (Locales[detectedLocale] ? detectedLocale : 'en-us')
    : 'en-us';

  return {
    locale,
    messages: {
      ...en,
      ...(Locales[locale] || {})
    }
  };
})(window);
