import { WASI, File, OpenFile, ConsoleStdout, PreopenDirectory } from 'https://esm.run/@bjorn3/browser_wasi_shim@0.3.0';

async function main(configuration = "debug") {
    // Fetch our Wasm File
    const response = await fetch(`./.build/${configuration}/Basic.wasm`);
    // Create a new WASI system instance
    const wasi = new WASI(/* args */["main.wasm"], /* env */[], /* fd */[
        new OpenFile(new File([])), // stdin
        ConsoleStdout.lineBuffered((stdout) => {
            console.log(stdout);
        }),
        ConsoleStdout.lineBuffered((stderr) => {
            console.error(stderr);
        }),
        new PreopenDirectory("/", new Map()),
    ])
    const { SwiftRuntime } = await import(`./.build/${configuration}/JavaScriptKit_JavaScriptKit.resources/Runtime/index.mjs`);
    // Create a new Swift Runtime instance to interact with JS and Swift
    const swift = new SwiftRuntime();
    // Instantiate the WebAssembly file
    const { instance } = await WebAssembly.instantiateStreaming(response, {
        wasi_snapshot_preview1: wasi.wasiImport,
        javascript_kit: swift.wasmImports,
    });
    // Set the WebAssembly instance to the Swift Runtime
    swift.setInstance(instance);
    // Start the WebAssembly WASI reactor instance
    wasi.initialize(instance);
    // Start Swift main function
    swift.main()
};

main();