import { WASI } from "@wasmer/wasi"
import { WasmFs } from "@wasmer/wasmfs"
import bindingsRaw from '@wasmer/wasi/lib/bindings/browser.js';
import { defaultImport } from 'default-import';

const bindings = defaultImport(bindingsRaw);

export function create_wasi(env) {
    return new WASI({
        args: [], // TODO: pass args maybe?
        env: Object.fromEntries(env),
        bindings: {
            ...bindings,
            fs: new WasmFs().fs,
        },
    })
}

export function generate_wasi_imports(module, wasi) {
    return hasWasiImports(module) ? wasi.getImports(module) : {};
}

export function bind_to_instance(wasi, instance) {
    wasi.setMemory(instance.exports["memory"]);
}

function hasWasiImports(module) {
    const imports = WebAssembly.Module.imports(module);
    const firstWasiImport = imports.find((x) => {
        return x.module === 'wasi_snapshot_preview1' || x.module === 'wasi_unstable';
    });
    return firstWasiImport !== undefined;
}
