//!wrt $BSPEC:{"icn":"apps/wasm-tools","cpr":"Copyright (C) Windows 96 Team 2023.","dsc":"Toolkit for WASM binaries","frn":"WASM Tools","ver":1,"ssy":"gui"}

const{WindowParams:WindowParams}=w96,{Theme:Theme,OpenFileDialog:OpenFileDialog,MsgBoxSimple:MsgBoxSimple}=w96.ui,{TabControl:TabControl}=w96.ui.components,{wasm:WASM}=w96.sys;function npeek(e){return null==e?-1:e}function acmp(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}class WASMToolsApplication extends WApplication{constructor(){super()}async main(e){super.main(e),"undefined"!=typeof WebAssembly?null!=e[1]?this._createWindow(e[1]):new OpenFileDialog("c:/",["wasm","WASM"],(e=>{e?this._createWindow(e):this.terminate()})).show():MsgBoxSimple.error("Unsupported Platform",'<span class="bold-noaa">Critical Error:</span> This browser does not support WebAssembly.',"OK")}async _createWindow(e){var t=new WindowParams;t.title="WASM Tools",t.initialWidth=410,t.initialHeight=365,t.resizable=!0;var n=this.createWindow(t,!0);n.registerWindow(),n.registerAppBar(),n.setHtml(""),n.setWindowIcon(await Theme.getIconUrl("apps/wasm-tools","16x16"));const o=n.wndObject.querySelector(".window-html-content");o.classList.add("wasmtools-app");const s=new TabControl;try{await this.loadFile(e)}catch(e){console.log(e),MsgBoxSimple.error("Error","Cannot load WebAssembly file!","OK"),this.terminate()}const a=s.addPage("Exported Functions",(e=>this._page_exportedFunctions(e)));s.setSize("100%","100%"),o.appendChild(s.getElement());const i=document.createElement("footer");i.classList.add("w96-footer"),i.innerText=e,o.appendChild(i),n.show(),s.openPage(a)}async _page_exportedFunctions(e){const t=document.createElement("div");t.classList.add("readonly-tbox"),this.exports.forEach((e=>{const n=document.createElement("span");n.classList.add("line"),n.innerHTML='<span style="color: royalblue">ƒ</span> '+e,t.appendChild(n)})),e.appendChild(t)}readImports(e){const t=[0,1,3],n=[];for(let o=6;o<e.length&&!acmp([npeek(e[o]),npeek(e[o+1]),npeek(e[o+2])],t);o++)n.push(e[o]);const o=[];n.forEach((e=>o.push(String.fromCharCode(e))));return o.join("").replace(/\W/gi," ").split(" ").filter((e=>""!=e&&("imports"!=e&&!/^[0-9]/.test(e))))}async loadFile(e){const t=await WASM.loadLocal(e,!0);this.exports=Object.keys(t.instance.exports)}}

return await WApplication.execAsync(new WASMToolsApplication(), this.boxedEnv.args, this);