"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7388],{14734:(e,t,o)=>{o.d(t,{F:()=>a});var n=o(12115),r=o(9829),l=o(36489),s=o(95704);function a(){var e;let{data:t}=(0,l.useSession)(),[o,a]=(0,n.useState)(null),[i,u]=(0,n.useState)(!1),[c,d]=(0,n.useState)(null),f=(0,n.useRef)(null);return(0,n.useEffect)(()=>{(async()=>{try{var e;let t=await fetch("/api/settings/socket-status"),o=await t.json();d(null==(e=o.socketEnabled)||e),console.log("\uD83D\uDD0C Socket enabled status:",o.socketEnabled)}catch(e){console.error("Error checking socket status:",e),d(!0)}})()},[]),(0,n.useEffect)(()=>{if(!(null==t?void 0:t.user)||null===c)return;if(!1===c)return void console.log("\uD83D\uDD0C Socket.IO disabled by admin - SSE will be used instead");let e=window.location.hostname.includes("app.github.dev")||window.location.hostname.includes("github.dev"),n=window.location.origin;console.log("\uD83D\uDD0C Socket URL Detection:"),console.log("  - isCodespace:",e),console.log("  - NODE_ENV:","production"),console.log("  - NEXT_PUBLIC_SITE_URL:",s.env.NEXT_PUBLIC_SITE_URL),console.log("  - window.location.origin:",window.location.origin),console.log("  - window.location.hostname:",window.location.hostname),console.log("  - Final socketUrl:",n);let l=(0,r.io)(n,{path:"/api/socket/io",addTrailingSlash:!1,transports:["polling","websocket"],timeout:1e4,reconnection:!0,reconnectionAttempts:3,reconnectionDelay:5e3,reconnectionDelayMax:1e4,randomizationFactor:0,forceNew:!0});return l.on("connect",()=>{console.log("✅ Socket connected:",l.id),u(!0),t.user.id&&l.emit("joinUserRoom",t.user.id)}),l.on("disconnect",e=>{console.log("❌ Socket disconnected:",e),u(!1),"io server disconnect"===e&&(f.current=setTimeout(()=>{l.connect()},5e3))}),l.on("connect_error",e=>{console.error("\uD83D\uDD25 Socket connection error:",e.message),u(!1)}),l.io.on("reconnect_failed",()=>{console.log("❌ Socket reconnection failed after all attempts. Stopping socket."),u(!1)}),a(l),()=>{f.current&&clearTimeout(f.current),null==o||o.disconnect()}},[null==t||null==(e=t.user)?void 0:e.id,c]),{socket:o,isConnected:i,joinUserRoom:()=>{o&&(null==t?void 0:t.user.id)&&o.emit("joinUserRoom",t.user.id)},leaveUserRoom:()=>{o&&(null==t?void 0:t.user.id)&&o.emit("leaveUserRoom",t.user.id)},joinCafeRoom:e=>{o&&o.emit("joinCafeRoom",e)},leaveCafeRoom:e=>{o&&o.emit("leaveCafeRoom",e)},joinEventRoom:e=>{o&&o.emit("joinEventRoom",e)},leaveEventRoom:e=>{o&&o.emit("leaveEventRoom",e)}}}},41444:(e,t,o)=>{o.d(t,{v:()=>r});class n{formatMessage(e,t,o){let n=new Date().toISOString();return o&&JSON.stringify(o),JSON.stringify({timestamp:n,level:e,message:t,...o})}info(e,t){console.log(this.formatMessage("info",e,t))}warn(e,t){console.warn(this.formatMessage("warn",e,t))}error(e,t){console.error(this.formatMessage("error",e,t))}debug(e,t){}}let r=new n},87388:(e,t,o)=>{o.d(t,{y:()=>u});var n=o(12115),r=o(20063),l=o(36489),s=o(18720),a=o(14734),i=o(41444);function u(e){var t,o;let{tableId:u,isCreator:c=!1,isPlayerTable:d=!0,onStatusChange:f,onArchetypeRequired:g}=e,{data:v,status:m}=(0,l.useSession)(),E=(0,r.useRouter)(),{socket:S,isConnected:h,joinEventRoom:w,leaveEventRoom:b,joinUserRoom:k}=(0,a.F)(),[p,I]=(0,n.useState)(null),[N,R]=(0,n.useState)(null),[y,D]=(0,n.useState)(!0),[C,j]=(0,n.useState)(!1),[_,T]=(0,n.useState)(null),U=(0,n.useRef)(f);U.current=f;let M=(0,n.useCallback)(async()=>{var e,t,o;if(!(null==v||null==(e=v.user)?void 0:e.id)||c||!d)return void D(!1);try{let e=await fetch("/api/tables/".concat(u,"/my-request"),{cache:"no-store"}),n=await e.json();if(n.success&&n.data){let e=n.data.status||null;I(e),R(n.data.booking||null),null==(t=U.current)||t.call(U,e)}else I(null),R(null),null==(o=U.current)||o.call(U,null)}catch(e){i.v.error("Error fetching table join status:",{error:e,tableId:u})}finally{D(!1)}},[u,null==v||null==(t=v.user)?void 0:t.id,c,d]);(0,n.useEffect)(()=>{"loading"!==m&&M()},[m,M]),(0,n.useEffect)(()=>{var e;if(!S||!h||!u)return;w(u),(null==v||null==(e=v.user)?void 0:e.id)&&k();let t=e=>{if(e.tableId===u){var t,o;e.userId!==(null==v||null==(t=v.user)?void 0:t.id)&&e.userId||(I(e.status),R(t=>t?{...t,status:e.status}:{id:e.bookingId,status:e.status}),null==(o=U.current)||o.call(U,e.status),"PENDING_PAYMENT"===e.status?s.o.success("\uD83C\uDF89 درخواست همبازی شدن شما تایید شد! لطفاً پرداخت را انجام دهید."):"CONFIRMED"===e.status?s.o.success("✅ عضویت شما در میز قطعی شد!"):"CANCELLED"===e.status&&s.o.info("وضعیت درخواست شما تغییر کرد (لغو شد)."))}},o=e=>{var t,o;if(e.eventId===u&&e.userId===(null==v||null==(t=v.user)?void 0:t.id)){let t=e.status;I(t),R(o=>o?{...o,status:t}:{id:e.bookingId,status:t}),null==(o=U.current)||o.call(U,t)}};return S.on("tableJoinRequestUpdate",t),S.on("bookingStatusChanged",o),()=>{S.off("tableJoinRequestUpdate",t),S.off("bookingStatusChanged",o),b(u)}},[S,h,u,null==v||null==(o=v.user)?void 0:o.id,w,b,k]),(0,n.useEffect)(()=>{if(!N)return void T(null);let e=0,t=null;if("PENDING"===p&&N.createdAt?(e=900,t=new Date(N.createdAt)):"PENDING_PAYMENT"===p&&N.updatedAt&&(e=600,t=new Date(N.updatedAt)),!t||0===e)return void T(null);let o=()=>{let o=Math.floor((Date.now()-t.getTime())/1e3),n=Math.max(0,e-o);T(n),0===n&&M()};o();let n=setInterval(o,1e3);return()=>clearInterval(n)},[N,p,M]);let P=async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(null==v?void 0:v.user))return!1;j(!0);try{let o=await fetch("/api/tables/".concat(u,"/join"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({isAnonymous:e})}),n=await o.json();if(!n.success||!n.data)return"ARCHETYPE_REQUIRED"===n.code?null==g||g():s.o.error(n.error||"خطا در ثبت درخواست همبازی شدن"),!1;{var t;let e=n.data.bookingStatus||n.data.status||"PENDING";return I(e),R({id:n.data.bookingId,status:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),null==(t=U.current)||t.call(U,e),"PENDING_PAYMENT"===e?(s.o.info("در حال انتقال به صفحه پرداخت..."),setTimeout(()=>{E.push("/checkout/booking/".concat(n.data.bookingId))},500)):"CONFIRMED"===e?s.o.success("\uD83C\uDF89 عضویت شما در میز با موفقیت ثبت و قطعی شد!"):s.o.success("درخواست همبازی شدن با موفقیت برای پلی‌مستر ارسال شد!"),!0}}catch(e){return i.v.error("Error submitting join request:",{error:e,tableId:u}),s.o.error("خطای شبکه در ارسال درخواست"),!1}finally{j(!1)}},A=async()=>{if(!(null==N?void 0:N.id))return!1;j(!0);try{var e;let t=await fetch("/api/tables/".concat(u,"/join-requests/").concat(N.id,"/cancel"),{method:"POST"}),o=await t.json();if(!o.success)return s.o.error(o.error||"خطا در انصراف از درخواست"),!1;return I(null),R(null),T(null),null==(e=U.current)||e.call(U,null),s.o.success("درخواست شما با موفقیت لغو شد"),!0}catch(e){return i.v.error("Error cancelling join request:",{error:e,tableId:u,bookingId:N.id}),s.o.error("خطای شبکه در لغو درخواست"),!1}finally{j(!1)}},O=null!==_?"".concat(Math.floor(_/60),":").concat((_%60).toString().padStart(2,"0")):null;return{status:p,booking:N,loading:y,submitting:C,remainingSeconds:_,formattedCountdown:O,sendJoinRequest:P,cancelRequest:A,refetchStatus:M}}}}]);