import i18next from 'i18next'
import i18nextXHR from 'i18next-xhr-backend'
import i18nextCache from 'i18next-localstorage-cache'
import VueI18Next from '@panter/vue-i18next'
import _ from 'lodash'

/* global siteConfig, graphQL */

import localeQuery from 'gql/common/common-localization-query-translations.gql'

export default {
  VueI18Next,
  init() {
    i18next
      .use(i18nextXHR)
      .use(i18nextCache)
      .init({
        backend: {
          loadPath: '{{lng}}/{{ns}}',
          parse: (data) => data,
          ajax: (url, opts, cb, data) => {
            let langParams = url.split('/')
            graphQL.query({
              query: localeQuery,
              variables: {
                locale: langParams[0],
                namespace: langParams[1]
              }
            }).then(resp => {
              let ns = {}
              if (_.get(resp, 'data.localization.translations', []).length > 0) {
                resp.data.localization.translations.forEach(entry => {
                  _.set(ns, entry.key, entry.value)
                })
              }
              return cb(ns, {status: '200'})
            }).catch(err => {
              console.error(err)
              return cb(null, {status: '404'})
            })
          }
        },
        cache: {
          enabled: true,
          expiration: 60 * 60 * 1000
        },
        defaultNS: 'common',
        lng: siteConfig.lang,
        fallbackLng: siteConfig.lang,
        ns: ['common', 'auth']
      })
    return new VueI18Next(i18next)
  }
}