import ghidra.app.script.GhidraScript;
import ghidra.app.util.exporter.CppExporter;
import ghidra.app.util.exporter.GzfExporter;
import ghidra.app.util.exporter.HtmlExporter;
import ghidra.app.util.Option;
import ghidra.program.model.address.AddressSet;
import ghidra.util.task.TaskMonitor;
import java.io.File;
import java.util.List;

public class ReverssgExport extends GhidraScript {
    public void run() throws Exception {
        var program = currentProgram;
        var addresses = new AddressSet(program, program.getMinAddress(), program.getMaxAddress());
        var dir = askDirectory("choose a directory", "export");
        new GzfExporter().export(new File(dir, "ssgwin32.exe.gzf"), program.getDomainFile(), TaskMonitor.DUMMY);
        new HtmlExporter().export(new File(dir, "ssgwin32.exe.html"), program, addresses, TaskMonitor.DUMMY);
        var annotated = new CppExporter();
        annotated.setOptions(List.of(
            new Option(CppExporter.CREATE_HEADER_FILE, true),
            new Option(CppExporter.FUNCTION_TAG_FILTERS, "annotated"),
            new Option(CppExporter.FUNCTION_TAG_EXCLUDE, false)));
        annotated.export(new File(dir, "annotated-ssgwin32.exe.c"), program, addresses, TaskMonitor.DUMMY);
        var other = new CppExporter();
        other.setOptions(List.of(
            new Option(CppExporter.CREATE_HEADER_FILE, true),
            new Option(CppExporter.FUNCTION_TAG_FILTERS, "annotated"),
            new Option(CppExporter.FUNCTION_TAG_EXCLUDE, true)));
        other.export(new File(dir, "ssgwin32.exe.c"), program, addresses, TaskMonitor.DUMMY);
    }
}
