document.addEventListener("alpine:init",()=>{Alpine.store("moodboard",{isOpen:!1,loading:!1,activeBoard:null,boards:[],stockCodes:new Set,isSharedView:!1,sharedBoard:null,_initialized:!1,$remodal:null,get isUserLoggedIn(){return window.appConfig.userLoggedIn},get isEmpty(){return this.stockCodes.size===0},get displayBoard(){return this.isSharedView?this.sharedBoard:this.activeBoard},get sidebarItems(){const n=this.activeBoard?.Products??[],t=n.length,i=Math.ceil((t+1)/4)*4,r=Array.from({length:i-t},()=>({_empty:!0}));return[...n,...r]},inMoodboard(n){return this.stockCodes.has(n)},async init(){if(!this._initialized){this._initialized=!0;this.$remodal=$('[data-remodal-id="moodboard"]').remodal({hashTracking:!1,closeOnOutsideClick:!0});$(document).on("closed",'[data-remodal-id="moodboard"]',()=>{this.isOpen&&(this.isOpen=!1,this.isSharedView=!1,this.sharedBoard=null,window.routing.navigateBackToLastSearch(!1))});await this._loadInitial()}},async _loadInitial(){this.isUserLoggedIn?await this._loadClientBoard():this._loadAnonymousFromCookie()},async _loadClientBoard(){this.loading=!0;try{const i=this._getCookie(),n=await this.api.get();if(!n)return;this.activeBoard=n;this.stockCodes=new Set(n.Products.map(n=>n.StockCode));i?.products?.length&&(await this.api.batchAdd(n.Id,i.products),this._clearCookie(),await this._refreshActiveBoard());const t=localStorage.getItem("moodboard_active_guid");if(t&&t!==n.Id){const n=await this.api.get(t);n&&(this.activeBoard=n,this.stockCodes=new Set(n.Products.map(n=>n.StockCode)))}}finally{this.loading=!1}},_loadAnonymousFromCookie(){const n=this._getCookie(),t=n?.products??[];this.activeBoard={Id:n?.id??"",Key:null,Title:window.resources.AnonymousMoodboardTitle,IsFavourites:!1,Products:t.map(n=>({StockCode:n}))};this.stockCodes=new Set(t);n?.id&&this.api.get(n.id).then(n=>{n&&(this.activeBoard=n,this.stockCodes=new Set(n.Products.map(n=>n.StockCode)))})},open(n=false){this.isSharedView=n;this.isOpen=!0;this.$remodal?.state!=="open"&&this.$remodal.open();this.isUserLoggedIn&&!this.boards.length&&this.api.getAll().then(n=>{this.boards=n??[]});n||this._refreshActiveBoard()},close(){this.isOpen=!1;this.isSharedView=!1;this.sharedBoard=null;this.$remodal?.close()},async openByGuid(n){const t=await this.api.get(n);t&&(this.activeBoard=t,this.stockCodes=new Set(t.Products.map(n=>n.StockCode)),this._setCookie({id:n,products:[...this.stockCodes]}));this.open(!1)},async openShared(n){const t=await this.api.getByNumericId(n);t&&(this.sharedBoard=t);this.open(!0)},async switchBoard(n){if(n!==this.activeBoard?.Id){this.loading=!0;const t=await this.api.get(n);t&&(this.activeBoard=t,this.stockCodes=new Set(t.Products.map(n=>n.StockCode)),localStorage.setItem("moodboard_active_guid",n));this.loading=!1}},async toggle(n){this.inMoodboard(n)?await this.remove(n):await this.add(n)},async add(n){if(this.isUserLoggedIn){if(!this.activeBoard?.Id)return;const t=await this.api.addProduct(this.activeBoard.Id,n);t?(this.stockCodes=new Set([...this.stockCodes,n]),this.activeBoard.Products=[...(this.activeBoard.Products??[]),{StockCode:n}],this._incrementBoardCount(this.activeBoard.Id,1)):toastr.error("Could not add to moodboard.")}else{if(this.inMoodboard(n))return;this.stockCodes=new Set([...this.stockCodes,n]);this.activeBoard.Products=[...(this.activeBoard.Products??[]),{StockCode:n}];this._saveCookie()}},async remove(n){if(this.isUserLoggedIn){if(!this.activeBoard?.Id)return;const t=await this.api.removeProduct(this.activeBoard.Id,n);t?(this.stockCodes=new Set([...this.stockCodes].filter(t=>t!==n)),this.activeBoard.Products=(this.activeBoard.Products??[]).filter(t=>t.StockCode!==n),this._incrementBoardCount(this.activeBoard.Id,-1)):toastr.error("Could not remove from moodboard.")}else this.stockCodes=new Set([...this.stockCodes].filter(t=>t!==n)),this.activeBoard.Products=(this.activeBoard.Products??[]).filter(t=>t.StockCode!==n),this._saveCookie()},_incrementBoardCount(n,t){const i=this.boards.find(t=>t.Id===n);i&&(i.ProductCount=(i.ProductCount??0)+t)},async createBoard(n){const r=window.resources.AnonymousMoodboardTitle,u=new Set(this.boards.map(n=>n.Title));let i=r,f=2;while(u.has(i))i=`${r} (${f++})`;const e=n?.trim()||i,t=await this.api.createBoard(e);return t&&(this.boards=[...this.boards,{Id:t.Id,Title:t.Title,IsFavourites:!1,Created:t.Created,ProductCount:0,ThumbStockCodes:[]}],await this.switchBoard(t.Id)),t},async deleteBoard(n){const t=await this.api.deleteBoard(n);if(t&&(this.boards=this.boards.filter(t=>t.Id!==n),this.activeBoard?.Id===n)){const n=this.boards.find(n=>n.IsFavourites);n&&await this.switchBoard(n.Id)}},async renameBoard(n,t){const r=await this.api.renameBoard(n,t);if(r){this.activeBoard?.Id===n&&(this.activeBoard={...this.activeBoard,Title:t});const i=this.boards.find(t=>t.Id===n);i&&(i.Title=t)}},newAnonymousBoard(){this.activeBoard={Id:"",Key:null,Title:window.resources.AnonymousMoodboardTitle,IsFavourites:!1,Products:[]};this.stockCodes=new Set;this._clearCookie()},async saveAnonymous(n,t,i){const r=await this.api.saveAnonymous({Title:n||window.resources.AnonymousMoodboardTitle,EmailAddress:t,g_Recaptcha_Response:i,MoodboardId:this.activeBoard?.Id||null,StockCodes:[...this.stockCodes]});return r&&(this.activeBoard=r,this._setCookie({id:r.Id,products:[...this.stockCodes]})),r},async shareMoodboard(n){return this.api.share({MoodboardId:this.displayBoard?.Id,...n})},download(){window.open("/Moodboard/Download/"+(this.displayBoard?.Id??""),"_blank")},async _refreshActiveBoard(){const n=this.activeBoard?.Id;if(n){const t=await this.api.get(n);t&&(this.activeBoard=t,this.stockCodes=new Set(t.Products.map(n=>n.StockCode)))}else if(this.stockCodes.size){const n=await this.api.productSummary([...this.stockCodes]);n?.length&&(this.activeBoard.Products=n)}},_getCookie(){try{const n=$.cookie("Moodboard");return n?JSON.parse(n):null}catch{return null}},_saveCookie(){this._setCookie({id:this.activeBoard?.Id??"",products:[...this.stockCodes]})},_setCookie(n){$.cookie("Moodboard",JSON.stringify(n),{expires:7,path:"/"})},_clearCookie(){$.removeCookie("Moodboard",{path:"/"})},api:{async get(n=null){const i=n?`/api/Moodboard?id=${encodeURIComponent(n)}`:"/api/Moodboard",t=await fetch(i);return t.ok?t.json():null},async getByNumericId(n){const t=await fetch(`/api/Moodboard/ID?id=${encodeURIComponent(n)}`);return t.ok?t.json():null},async getAll(){const n=await fetch("/api/Moodboard/All");return n.ok?n.json():null},async createBoard(n){const i=n?`/api/Moodboard?title=${encodeURIComponent(n)}`:"/api/Moodboard",t=await fetch(i,{method:"POST"});return t.ok?t.json():null},async deleteBoard(n){const t=await fetch(`/api/Moodboard?id=${encodeURIComponent(n)}`,{method:"DELETE"});return t.ok},async renameBoard(n,t){const i=await fetch("/api/Moodboard/Rename",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({MoodboardId:n,Title:t})});return i.ok},async addProduct(n,t){const i=await fetch("/api/MoodboardProduct",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({MoodboardId:n,StockCode:t})});return i.ok},async batchAdd(n,t){const i=await fetch("/api/MoodboardProduct/Batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({MoodboardId:n,StockCodes:t})});return i.ok},async removeProduct(n,t){const i=new URLSearchParams({MoodboardId:n,StockCode:t}),r=await fetch("/api/MoodboardProduct?"+i,{method:"DELETE"});return r.ok},async productSummary(n){const t=await fetch("/api/Product/Summary",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return t.ok?t.json():null},async saveAnonymous(n){const t=await fetch("/api/Moodboard/Save",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return t.ok?t.json():null},async share(n){const t=await fetch("/api/Moodboard/Share",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return t.ok?t.json().catch(()=>!0):null}}})})