#!/usr/bin/env node

if (!require('assert').strict) {
	console.error("We require Node.js version 10 or later; you're using " + process.version);
	process.exit(1);
}

var execSync = require('child_process').execSync;
var fs = require('fs');

process.chdir(__dirname);

try {
	require.resolve('@babel/core');
} catch (e) {
	console.log('Installing dependencies...');
	execSync('npm install', {stdio: 'inherit'});
}

try {
	require.resolve('./config/config');
} catch (err) {
	if (err.code !== 'MODULE_NOT_FOUND') throw err; // should never happen

	console.log('config.js does not exist. Creating one with default settings...');
	fs.writeFileSync(
		'config/config.js',
		fs.readFileSync('config/config-example.js')
	);
}

var options = {cwd: __dirname, stdio: 'inherit'};
var full = '';

switch (process.argv[2] || '') {
case 'full':
	execSync(`node ./build-tools/build-indexes`, options);
	execSync(`node ./build-tools/build-learnsets`, options);
	execSync(`node ./build-tools/build-minidex`, options);
	full = ' full';
	break;
case 'indexes':
	execSync(`node ./build-tools/build-indexes`, options);
	break;
case 'learnsets':
	execSync(`node ./build-tools/build-learnsets`, options);
	break;
case 'minidex':
case 'sprites':
	execSync(`node ./build-tools/build-minidex`, options);
	break;
case 'commands':
	execSync(`node ./build-tools/build-commands`, options);
	break;
case 'replays':
	execSync(`node ./build-tools/build-replays`, options);
	process.exit();
	break;
case 'test-only':

	break;
case '':
	break;
default:
	console.log(`Unrecognized command ${process.argv[2]}`);
	process.exit();
	break;
}

execSync(`node ./build-tools/update` + full, options);

if (full) {
	try {
		execSync(`node ./build-tools/build-commands`, options);
		execSync(`node ./build-tools/build-replays`, options);
	} catch (e) {
		console.error(e);
	}
}
