import ghidra.program.database.sourcemap.UserDataPathTransformer;
import ghidra.program.model.sourcemap.SourcePathTransformer;

// Remap:
// /build/source/core (libiwasm)
// /home/christoph/Notes/TU/MastersThesis/FailNix/build-sum2_repl_cored_late/module_host.c
public class RemapSourcePaths extends GhidraScript {

  @Override
  protected void run() throws Exception {
    String[] args = getScriptArgs();
    if (args.length < 2) {
      throw new IllegalArgumentException(
          "Missing file paths.\nUsage: RemapSourcePaths <libiwasm> <host>");
    }

    // https://ghidra.re/ghidra_docs/api/ghidra/program/model/sourcemap/SourcePathTransformer.html
    SourcePathTransformer tx = UserDataPathTransformer.getPathTransformer(currentProgram);

    String oldIwasmDir = "/build/source/core";
    String newIwasmDir = args[0];

    tx.addDirectoryTransform(oldIwasmDir, newIwasmDir);
    println("Added transform:");
    println("  " + oldIwasmDir + " -> " + newIwasmDir);

    // TODO: What to do here? Need to know the build dir name...
    String failNix = "/home/christoph/Notes/TU/MastersThesis/FailNix";
    String oldHostDir = failNix + "/build-.../module_host.c";
    String newHostDir = args[1];

    tx.addDirectoryTransform(oldHostDir, newHostDir);
    println("Added transform:");
    println("  " + oldHostDir + " -> " + newHostDir);
  }
}
