const webpack = require("webpack");
const { resolve } = require("path");
const ora = require("ora");
const { spawn } = require("child_process");
const rm = require("rimraf");
const chalk = require("chalk");
const webpackConfig = require("./webpack.config.main.js");
const electron = require("electron");
const spinner = ora("building electron...");
spinner.start();
let electronProcess = null;

const isDev = process.env.NODE_ENV !== "production";

const startMain = () => {
  return new Promise((resolve) => {
    rm("./dist/main.js", (removeErr) => {
      if (removeErr) {
        throw removeErr;
      }
      webpackConfig.mode = "production";
      const compiler = webpack(webpackConfig);
      compiler.watch({}, (err, stats) => {
        if (err) throw err;
        spinner.stop();
        process.stdout.write(
          stats.toString({
            colors: true,
            modules: false,
            children: false,
            chunks: false,
            chunkModules: false,
          }) + "\n\n"
        );

        if (stats.hasErrors()) {
          console.log(chalk.red("Build failed with errors.\n"));
          process.exit(1);
        }
        resolve();
        console.log(
          chalk.cyan(
            `Build complete production in ${
              stats.endTime - stats.startTime
            }ms.\n`
          )
        );
        console.log("process.env.IS_BUILDER", process.env.IS_BUILDER);
        if (process.env.IS_BUILDER === "builder") process.exit();
      });
    });
  });
};

const startElectron = () => {
  if (process.env.IS_BUILDER === "builder") return;
  var args = ["--inspect=5858", resolve(__dirname, "../dist/main.js")];
  electronProcess = spawn(electron, args);

  electronProcess.on("close", () => {
    process.exit();
  });
};
async function init() {
  try {
    await startMain();
    await startElectron();
  } catch (error) {
    console.error(error);
  }
}
init();