const soljson = require("solc/soljson");
const createRevive = require("./resolc.js");

async function compile(standardJsonInput) {
  if (!standardJsonInput) {
    throw new Error("Input JSON for the Solidity compiler is required.");
  }

  // Initialize the compiler
  const compiler = createRevive();
  compiler.soljson = soljson;

  // Provide input to the compiler
  compiler.writeToStdin(JSON.stringify(standardJsonInput));

  // Run the compiler
  compiler.callMain(["--standard-json"]);

  // Collect output
  const stdout = compiler.readFromStdout();
  const stderr = compiler.readFromStderr();

  // Check for errors and throw if stderr exists
  if (stderr) {
    throw new Error(`Compilation failed: ${stderr}`);
  }

  // Return the output if no errors
  return stdout;
}

module.exports = { compile };
