"use strict";

const debug = require('debug')('cypress:cli');

const util = require('../util');

const spawn = require('./spawn');

const verify = require('../tasks/verify');

const {
  processTestingType
} = require('./shared');

module.exports = {
  start(options = {}) {
    if (!util.isInstalledGlobally() && !options.global && !options.project) {
      options.project = process.cwd();
    }

    const args = [];

    if (options.config) {
      args.push('--config', options.config);
    }

    if (options.configFile !== undefined) {
      args.push('--config-file', options.configFile);
    }

    if (options.browser) {
      args.push('--browser', options.browser);
    }

    if (options.env) {
      args.push('--env', options.env);
    }

    if (options.port) {
      args.push('--port', options.port);
    }

    if (options.project) {
      args.push('--project', options.project);
    }

    args.push(...processTestingType(options.testingType));
    debug('opening from options %j', options);
    debug('command line arguments %j', args);

    function open() {
      return spawn.start(args, {
        dev: options.dev,
        detached: Boolean(options.detached),
        stdio: 'inherit'
      });
    }

    if (options.dev) {
      return open();
    }

    return verify.start().then(open);
  }

};