/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

const { spawn } = require("child_process");
const { kill } = require("cross-port-killer");

const env = Object.create(process.env);
env.BROWSER = "none";
const startServer = spawn(
  /^win/.test(process.platform) ? "npm.cmd" : "npm",
  ["start"],
  {
    env,
  },
);

startServer.stderr.on("data", (data) => {
  // eslint-disable-next-line
  console.log(data);
});

startServer.on("exit", () => {
  kill(process.env.PORT || 8000);
});

// eslint-disable-next-li
// eslint-disable-next-line no-console
console.log("Starting development server for e2e tests...");
startServer.stdout.on("data", (data) => {
  // eslint-disable-next-line
  console.log(data.toString());
  if (
    data.toString().indexOf("Compiled successfully") >= 0 ||
    data.toString().indexOf("Compiled with warnings") >= 0
  ) {
    // eslint-disable-next-line
    console.log('Development server is started, ready to run tests.');
    const testCmd = spawn(
      /^win/.test(process.platform) ? "npm.cmd" : "npm",
      ["test"],
      {
        stdio: "inherit",
      },
    );
    testCmd.on("exit", (code) => {
      startServer.kill();
      process.exit(code);
    });
  }
});
