/**
 * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */

'use strict'

/* eslint-env node */

const path = require('path')
const webpack = require('webpack')
const { bundler, styles } = require('@ckeditor/ckeditor5-dev-utils')
const CKEditorWebpackPlugin = require('@ckeditor/ckeditor5-dev-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
// console.log(process.argv)
// console.log(process.env.NODE_ENV === 'development')
module.exports = (env, argv) => {
  const config = {
    // devtool: 'source-map',
    // devtool: false,
    performance: { hints: false },

    entry: path.resolve(__dirname, 'src', 'ckeditor.js'),
    experiments: {
      outputModule: true
    },
    optimization: {
      minimizer: [
        new TerserPlugin({
          sourceMap: true,
          terserOptions: {
            output: {
              // Preserve CKEditor 5 license comments.
              comments: /^!/
            }
          },
          extractComments: false
        })
      ]
    },

    plugins: [
      new CKEditorWebpackPlugin({
        // UI language. Language codes follow the https://en.wikipedia.org/wiki/ISO_639-1 format.
        // When changing the built-in language, remember to also change it in the editor's configuration (src/ckeditor.js).
        language: 'en',
        additionalLanguages: 'all'
      }),
      new webpack.BannerPlugin({
        banner: bundler.getLicenseBanner(),
        raw: true
      })
    ],

    module: {
      rules: [
        {
          test: /\.svg$/,
          use: ['raw-loader']
        },
        {
          test: /\.css$/,
          use: [
            {
              loader: 'style-loader',
              options: {
                injectType: 'singletonStyleTag',
                attributes: {
                  'data-cke': true
                }
              }
            },
            'css-loader',
            {
              loader: 'postcss-loader',
              options: {
                postcssOptions: styles.getPostCssConfig({
                  themeImporter: {
                    themePath: require.resolve('@ckeditor/ckeditor5-theme-lark')
                  },
                  minify: true
                })
              }
            }
          ]
        },
        {
          test: /\.ts$/,
          use: ['ts-loader']
        }
      ]
    },

    resolve: {
      extensions: ['.ts', '.js', '.json']
    }
  }
  if (argv.mode === 'development') {
    config.output = {
      library: 'CKEDITOR',
      path: path.resolve(__dirname, 'build'),
      filename: 'ckeditor.js',
      libraryTarget: 'umd'
    }
    config.output = {
      library: 'CKEDITOR',
      path: path.resolve(__dirname, 'build'),
      filename: 'ckeditor.js',
      libraryTarget: 'umd'
    }
  } else {
    config.output = {
      path: path.resolve(__dirname, 'build'),
      filename: 'ckeditor.js',
      libraryTarget: 'module'
    }
  }
  return config
}
