#!/usr/bin/env node

const fs = require("fs");
const path = require("path");
const cp = require("child_process");
const jestDiff = require("jest-diff");

const version = require("../package.json").version;
const filepath = path.resolve(__dirname, "..", "library", "Fnm__Package.re");

main({ failOnDifference: process.argv[2] === "--fail-on-difference" });

function generateModule() {
  const moduleText = `
    let version = "${version}";
  `;
  return cp.execSync(`esy refmt`, { input: moduleText }).toString();
}

function readFile() {
  try {
    return fs.readFileSync(filepath, "utf8");
  } catch (e) {
    return "";
  }
}

function main({ failOnDifference }) {
  const result = generateModule();

  if (failOnDifference) {
    const currentContents = readFile();
    if (currentContents !== result) {
      console.log(jestDiff(result, currentContents));
      console.log(
        "Fnm__Package.re is outdated! Please update it with `esy update-fnm-package`."
      );
      process.exit(1);
    }
  }

  fs.writeFileSync(filepath, result);
}