const path = require('path')
const esbuild = require('esbuild')

const packagejson = require('./package.json')
const sourcemap = process.env.NODE_ENV === 'dev' ?  'inline' : false

const clientFiles = [
  // Client files list, without the file extension:
  'common-client-plugin',
  'videowatch-client-plugin',
  'admin-plugin-client-plugin'
]

const configs = clientFiles.map(f => ({
  entryPoints: [ path.resolve(__dirname, 'client', f + '.ts') ],
  alias: {
    'shared': path.resolve(__dirname, 'shared/')
  },
  define: {
    PLUGIN_CHAT_PACKAGE_NAME: JSON.stringify(packagejson.name),
    PLUGIN_CHAT_SHORT_NAME: JSON.stringify(packagejson.name.replace(/^peertube-plugin-/, ''))
  },
  bundle: true,
  minify: true,
  // FIXME: sourcemap:`true` does not work for now, because peertube does not serve static files.
  // See https://github.com/Chocobozzz/PeerTube/issues/5185
  sourcemap,
  format: 'esm',
  target: 'safari11',
  outfile: path.resolve(__dirname, 'dist/client', f + '.js'),
}))

configs.push({
  entryPoints: ["./conversejs/builtin.ts"],
  bundle: true,
  minify: true,
  sourcemap,
  target: 'safari11',
  outfile: path.resolve(__dirname, 'dist/client/static', 'builtin.js'),
})

configs.push({
  entryPoints: ["./client/settings.ts"],
  bundle: true,
  minify: true,
  sourcemap,
  target: 'safari11',
  outfile: path.resolve(__dirname, 'dist/client/settings', 'settings.js'),
})

const promises = configs.map(c => esbuild.build(c))

Promise.all(promises)
  .catch(() => process.exit(1))