/**
 * With this helper you can start emulators from the command line with some easy questions.
 * It will automatically list all AVD's that you've configuered on your machine.
 *
 * NOTE 1:  MAKE SURE YOU'VE ADDED inquirer WITH `npm install inquirer --D` TO YOUR DEV DEPENDENCIES
 * NOTE 2:  MAKE SURE YOU'VE SETUP UP YOUR ENVIRONMENT CORRECTLY WITH ALL THE ENVIRONMENT VARIABLES NEEDED
 *          FOR MAKING ANDROID WORK ON YOUR MACHINE
 * NOTE 3:  MAKE USE YOU HAVE SET YOUR `HOME`, THAT SHOULD BE SOMETHING LIKE `/Users/wswebcreation`
 * NOTE 4:  MAKE SURE YOU'VE SET THE `ANDROID_EMULATOR_PATH` TO THE CORRECT PATH ON YOUR MACHINE
 *          WHERE ALL THE EMULATORS ARE LISTED, WITHOUT THE `HOME` PATH IN IT
 *
 * When you start the script you will get something like this
 *
 * ----------------------------------------------------------
 *
 * ===============================
 *   Android Emulator CLI Helper
 * ===============================
 *
 * ? Which emulator do you want to start? (Use arrow keys)
 * ❯ NexusS_5.1
 *   Nexus_5_6.0
 *   Nexus_5_7.1.1
 *   Nexus_6_6.0
 *   Pixel2XL_8.0
 *
 * ----------------------------------------------------------
 * 
 *  After selecting for example the Nexus_6_6.0 emulator you will see this
 *
 * ----------------------------------------------------------
 * ? Which emulator do you want to start? Nexus_6_6.0
 * ? Do you want to wipe data (delete all user data and copy data from the initial data file)? (Use arrow keys)
 * ❯ No
 *   Yes
 * ----------------------------------------------------------
 *
 * After selecting for example `Yes` you will see this
 *
 * ----------------------------------------------------------
 *  
 * ===============================
 *   Android Emulator CLI Helper
 * ===============================
 * 
 * ? Which emulator do you want to start? Nexus_6_6.0
 * ? Do you want to wipe data (delete all user data and copy data from the initial data file)? Yes
 * 
 * =========================================================
 *   Nexus_6_6.0 is being started
 *   You can close the device with 'CMD + C'.
 * =========================================================
 * 
 * ----------------------------------------------------------
 * 
 * Feel free to use it for all kinds of purposes, a star is much appreciated ;-)
 *
 * Grtz,
 * Wim | wswebreation
 */

const { prompt } = require('inquirer');
const { spawnSync, execFileSync } = require('child_process');
const { resolve } = require('path');

const ANDROID_EMULATOR_PATH = 'Library/Android/sdk/tools/emulator';

console.log(`
===============================
  Android Emulator CLI Helper
===============================
`);

const emulators = execFileSync(
  'emulator',
  ['-list-avds'],
  { encoding: 'utf8' },
)
  .replace(/\n$/, '')
  .split('\n');
if (emulators.length > 0) {
  prompt([
    {
      type: 'list',
      name: 'emulator',
      message: 'Which emulator do you want to start?',
      choices: emulators,
    },
    {
      type: 'list',
      name: 'wipeData',
      message: 'Do you want to wipe data (delete all user data and copy data from the initial data file)?',
      choices: ['No', 'Yes'],
    },
  ])
    .then((answer) => {
      console.log(`
=========================================================
  ${answer.emulator} is being started
  You can close the device with 'CMD + C'. 
=========================================================
`);
      const runOnEmulator = spawnSync(
        `${resolve(process.env.HOME, ANDROID_EMULATOR_PATH)}`,
        ['-avd', answer.emulator, answer.wipeData === 'Yes' ? '-wipe-data' : '-no-snapshot'],
      );
      console.log(runOnEmulator.stdout.toString());
      process.exit(0);
    });
} else {
  console.log(`
==================================
  NO ANDROID EMULATORS SPECIFIED
==================================
`);
}