"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.getI18nAssetForChunkAsStr = getI18nAssetForChunkAsStr;
exports.getI18nAssetsForChunkAsArrayStr = getI18nAssetsForChunkAsArrayStr;
exports.getInitialI18nAssetsArrayStr = getInitialI18nAssetsArrayStr;

var _I18nFilesEmitPlugin = require("./I18nSplitPlugin/I18nFilesEmitPlugin");

/* eslint-disable no-use-before-define */
// for SMap relate changes
// CdnChangePlugin
// SourceMapHookPlugin
function getInitialI18nAssetsArrayStr({
  entryPoint,
  compilation,
  i18nStore,
  chunkSplitEnable,
  i18nFileNameTemplate
}) {
  return getI18nAssetsForChunkAsArrayStr({
    chunks: entryPoint.chunks,
    compilation,
    i18nStore,
    chunkSplitEnable,
    i18nFileNameTemplate
  });
}

function getI18nAssetsForChunkAsArrayStr({
  chunks,
  compilation,
  i18nStore,
  chunkSplitEnable,
  i18nFileNameTemplate
}) {
  if (!chunkSplitEnable) {
    // NOTE: we have used lang variable inside
    // NOTE: below code for full i18n for now it is not implemented
    // if (!chunkSplitEnable) {
    //   let i18nAssets = {};
    //   const i18nFiles = Object.keys(compilation.assets).filter(
    //     assert => assert.indexOf(`i18n${path.sep}`) !== -1
    //   );
    //   // hook for i18n url contains i18n/ may cause problem
    //   i18nAssets = i18nFiles.reduce((res, i18nFilePath) => {
    //     const fileName = i18nFilePath.replace(`i18n${path.sep}`, '');
    //     const splittedFileName = fileName.split('.');
    //     res[splittedFileName[0]] = i18nFilePath;
    //     return res;
    //   }, {});
    //   return `[${JSON.stringify(i18nAssets)}[lang]]`;
    // }
    return '[]';
  }

  const i18nAssetsUrlTemplates = [...chunks].map(chunk => getI18nAssetForChunkAsStr({
    chunk,
    compilation,
    i18nStore,
    i18nFileNameTemplate
  })).filter(Boolean);
  return `${JSON.stringify(i18nAssetsUrlTemplates)}.map(urlPath => urlPath.replace(/@locale@/g, lang))`;
}

function getI18nAssetForChunkAsStr({
  chunk,
  compilation,
  i18nStore,
  i18nFileNameTemplate
}) {
  if (!i18nStore.isChunkHasI18n(chunk)) {
    return '';
  }

  const i18nAssetsUrlTemplates = _I18nFilesEmitPlugin.I18nFilesEmitPlugin.createFilenameWithHash({
    compilation,
    fileNameTemplate: i18nFileNameTemplate,
    chunk,
    locale: '@locale@',
    contentHash: 'contentHash'
  }).filename;

  return i18nAssetsUrlTemplates;
}