const { resolve } = require('./resolve');
const { rollup } = require('rollup');
const alias = require('@rollup/plugin-alias');
const commonjs = require('@rollup/plugin-commonjs');
const nodeResolve = require('@rollup/plugin-node-resolve').default;
const replace = require('@rollup/plugin-replace');
const babel = require('rollup-plugin-babel');
const svg = require('rollup-plugin-react-svg');
const { terser } = require('rollup-plugin-terser');

const plugins = [
  replace({
    preventAssignment: true,
    values: {
      'process.env.NODE_ENV': '"production"',
    },
  }),
  alias({
    entries: [
      { find: 'react', replacement: 'preact/compat' },
      { find: 'react-dom', replacement: 'preact/compat' },
      { find: 'svg', replacement: resolve('svg') },
      { find: 'utils', replacement: resolve('build/lib/util.js') },
    ],
  }),
  svg(),
  babel({
    exclude: 'node_modules/**',
  }),
  nodeResolve({
    extensions: [ '.mjs', '.js', '.jsx', '.json' ],
  }),
  commonjs({
    include: 'node_modules/**',
  }),
];


module.exports = exports = async function (input, prod) {
  const inputOptions = {
    input,
    plugins,
  };

  const outputOptions = {
    format: 'iife',
    sourcemap: 'inline',
    plugins: prod
      ? [ terser({ output: { comments: false } }) ]
      : undefined,

  };

  const bundle = await rollup(inputOptions);
  const output = await bundle.generate(outputOptions);

  // console.log(output);
  return output.output[0].code;
};