import i18n from 'i18next';
import Backend from 'i18next-http-backend';
import { initReactI18next } from 'react-i18next';

import PluginLoader from './plugin-loader';
import { DeckyUpdater } from './updater';

declare global {
  interface Window {
    DeckyPluginLoader: PluginLoader;
    DeckyUpdater?: DeckyUpdater;
    importDeckyPlugin: Function;
    deckyHasLoaded: boolean;
    deckyHasConnectedRDT?: boolean;
    deckyAuthToken: string;
    DFL?: any;
  }
}

(async () => {
  i18n
    .use(Backend)
    .use(initReactI18next)
    .init({
      load: 'currentOnly',
      detection: {
        order: ['querystring', 'navigator'],
        lookupQuerystring: 'lng',
      },
      //debug: true,
      lng: navigator.language,
      fallbackLng: 'en-US',
      interpolation: {
        escapeValue: true,
      },
      returnEmptyString: false,
      backend: {
        loadPath: 'http://127.0.0.1:1337/locales/{{lng}}.json',
        customHeaders: {
          Authentication: window.deckyAuthToken,
        },
        requestOptions: {
          credentials: 'include',
        },
      },
    });

  window.DeckyPluginLoader?.dismountAll();
  window.DeckyPluginLoader?.deinit();
  window.DeckyPluginLoader = new PluginLoader();
  window.DeckyPluginLoader.init();
  window.importDeckyPlugin = function (name: string, version: string) {
    window.DeckyPluginLoader?.importPlugin(name, version);
  };
})();

export default i18n;
