/// 
import { log } from "./logger.ts"
declare global {
    class RNNoiseNode extends AudioWorkletNode {
        static register(context: AudioContext): Promise
        constructor(context: AudioContext)
        // deno-lint-ignore no-explicit-any
        onstatus: (data: any) => void
        update(something: boolean): void
    }
}
// TODO fix leak
export async function get_rnnoise_node(context: AudioContext): Promise {
    log("rnnoise", "enabled")
    //@ts-ignore asfdasfd
    let RNNoiseNode: typeof RNNoiseNode = window.RNNoiseNode;
    let script: HTMLScriptElement;
    if (!RNNoiseNode) {
        log("rnnoise", "loading wasm...")
        script = document.createElement("script")
        script.src = "/_assets/rnnoise/rnnoise-runtime.js"
        script.defer = true
        document.head.appendChild(script)
        //@ts-ignore asdfsfad
        while (!window.RNNoiseNode) await new Promise(r => setTimeout(() => r(), 100))
        //@ts-ignore asfdsadfsafd
        RNNoiseNode = window.RNNoiseNode;
        log("rnnoise", "loaded")
    }
    await RNNoiseNode.register(context)
    return new RNNoiseNode(context)
}