//!wrt $BSPEC:{"icn":"apps/meme-man","cpr":"Copyright (C) Windows 96 Team 2023.","dsc":"Meme Man","frn":"Meme Man","ver":1,"ssy":"gui"}

const{rand:rand}=w96.util,{ContextMenu:ContextMenu,animateElement:animateElement}=w96.ui,SKINS=["skin1","skin2","skin3"],SKIN_H=180,SKIN_W=180;class MemeManApplication extends WApplication{constructor(){super(),this.currentSkin="",this.skinScale=1}async main(e){super.main(e),await this._init()}async _init(){const e=document.createElement("div");this.mmEl=e,e.className="meme-man",e.style.top=rand(0,window.innerHeight-this.getSkinH())+"px",e.style.left=rand(0,window.innerWidth-this.getSkinW())+"px",e.ondblclick=()=>this.randomTp(),e.oncontextmenu=e=>{try{document.body.onclick()}catch(e){}new ContextMenu([{type:"normal",label:"Cycle Skin",onclick:()=>this.cycleSkin()},{type:"separator"},{type:"submenu",label:"Movement",items:[{type:"normal",label:"Teleport",onclick:()=>this.randomTp()}]},{type:"submenu",label:"Scale",items:[{type:"normal",label:"1x",onclick:()=>this.setScale(1)},{type:"normal",label:"1.25x",onclick:()=>this.setScale(1.25)},{type:"normal",label:"1.5x",onclick:()=>this.setScale(1.5)},{type:"normal",label:"1.75x",onclick:()=>this.setScale(1.5)},{type:"normal",label:"2x",onclick:()=>this.setScale(2)}]},{type:"separator"},{type:"normal",label:"Quit",onclick:()=>this.terminate()}]).renderMenu(e.x,e.y)},$(e).draggable(),this.switchSkin(SKINS[0]),document.querySelector("#maingfx").appendChild(e)}switchSkin(e){this.mmEl.className=`meme-man ${e}`,this.currentSkin=e}randomTp(){animateElement(this.mmEl,"mm-zoomout",(()=>{this.mmEl.style.top=rand(0,window.innerHeight-this.getSkinH())+"px",this.mmEl.style.left=rand(0,window.innerWidth-this.getSkinW())+"px",animateElement(this.mmEl,"mm-zoomin")}))}cycleSkin(){let e=SKINS.indexOf(this.currentSkin),t=SKINS[e+1];null==t&&(t=SKINS[0]),this.switchSkin(t)}getSkinH(){return 180*this.skinScale}getSkinW(){return 180*this.skinScale}setScale(e=1){if(e<1)throw new Error("Invalid scale.");this.skinScale=e,this.mmEl.style.height=180*this.skinScale+"px",this.mmEl.style.width=180*this.skinScale+"px"}ontermination(){super.ontermination(),this.mmEl.remove(),this.mmEl=null}}

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