//!wrt $BSPEC:{"icn":null,"cpr":"Copyright (C) Windows 96 Team 2023.","dsc":"Mobile Programs Menu","frn":"Mobile Programs Menu","ver":1,"ssy":"gui"}

const{execFile:execFile}=w96.sys,{Theme:Theme}=w96.ui;class ImmersiveProgramsMenu extends WApplication{constructor(){super()}async main(t){super.main(t),w96.wmem.mobStart=this,this.wnd=this.createWindow({resizable:!1,draggable:!1,initialHeight:100,initialWidth:100,initialX:0,initialY:0,title:"Programs",mobResize:!0,animations:{windowClose:null,windowOpen:null}},!0),this.wnd.registerWindow(),this.wnd.setControlBoxStyle("WS_CBX_CLOSE");const i=this.wnd.getBodyContainer();i.classList.add("app-mbprograms"),i.innerHTML='\n            <div class="title">Programs</div>\n            <div class="icons"></div>\n            <div class="title">Utilities</div>\n            <div class="icons-aux"></div>\n        ',await FS.exists("c:/system/etc/mobsupport/programs")||await FS.mkdir("c:/system/etc/mobsupport/programs"),await this.populateView("c:/system/programs"),await this.populateView("c:/system/etc/mobsupport/programs",!1,".icons-aux"),this.wnd.show()}async populateView(t,i=!0,e=".icons"){const s=this.wnd.getBodyContainer().querySelector(e);for(;s.firstChild&&i;)s.removeChild(s.firstChild);for(let i of await FS.walk(t)){if(!await FS.isFile(i)||!i.endsWith(".link"))continue;const t=document.createElement("div");t.classList.add("item");const e=document.createElement("button");e.classList.add("w96-button"),e.style.backgroundImage=`url(${await Theme.getFileIconUrl(i)})`,e.addEventListener("click",(()=>execFile(i))),t.appendChild(e);const a=document.createElement("div");a.classList.add("text");let n=FSUtil.fname(i);a.innerText=n.substring(0,n.lastIndexOf(".")),t.appendChild(a);try{const a=await FS.readstr(i),n=JSON.parse(a);if(n.icon){let t=await Theme.getIconUrl(n.icon);(n.icon.startsWith("http:")||n.icon.startsWith("https:")||n.icon.startsWith("data:"))&&(t=n.icon),e.style.backgroundImage=`url(${t})`}s.appendChild(t)}catch(t){console.warn(t)}}}}

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