import { Binary } from "@coder/nbin";
import * as fs from "fs";
import * as os from "os";
import * as path from "path";
import { platform } from "../../../build/platform";

const target = `${platform()}-${os.arch()}`;
const rootDir = path.join(__dirname, "..");
const bin = new Binary({
	mainFile: path.join(rootDir, "out", "cli.js"),
	target: platform() === "darwin" ? "darwin" : platform() === "musl" ? "alpine" : "linux",
});
bin.writeFiles(path.join(rootDir, "build", "**"));
bin.writeFiles(path.join(rootDir, "out", "**"));
[
	// Native modules. These are marked as externals in the webpack config.
	"spdlog",
	"node-pty",

	// These are spdlog's dependencies.
	"mkdirp", "bindings",
].forEach((name) => {
	bin.writeModule(path.join(__dirname, "../../../node_modules", name));
});
bin.build().then((binaryData) => {
	const outputPath = path.join(__dirname, "..", `cli-${target}`);
	fs.writeFileSync(outputPath, binaryData);
	fs.chmodSync(outputPath, "755");
}).catch((ex) => {
	// tslint:disable-next-line:no-console
	console.error(ex);
	process.exit(1);
});