import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{S as t,T as n,a as r,k as i,t as a,w as o}from"./client-DWQBE01c.js";import{d as s,f as c}from"./chunk-62JRHF6Z-DYKXAPSj.js";import{n as l}from"./QueryClientProvider-CfzZA5MJ.js";import{t as u}from"./useQuery-Q4exvDrv.js";import{t as d}from"./box-2IRrqIPf.js";import{t as f}from"./clock-B_D089Yk.js";import{t as p}from"./flame-B4hkXht_.js";import{t as m}from"./layers-CpeKWrvK.js";import{t as h}from"./printer-B0-V64ms.js";import{t as g}from"./square-Cu6PTXpS.js";import{t as ee}from"./timer-DlNNMxUG.js";import{c as _,o as v}from"./date-G9KUauqz.js";import{t as y}from"./printerModel-DrNvERGQ.js";import{a as b,n as x,o as S,s as C,t as w}from"./OverlayFrame-DFtE4f7m.js";var T=e(i(),1),E=o();function D(e,t){let[n,r]=(0,T.useState)(null);return(0,T.useLayoutEffect)(()=>{let n=e.current;if(!t||!n)return;let i=()=>{let e=n.clientWidth,t=n.clientHeight;e>0&&t>0&&r(n=>n&&n.width===e&&n.height===t?n:{width:e,height:t})};if(i(),typeof ResizeObserver>`u`)return window.addEventListener(`resize`,i),()=>window.removeEventListener(`resize`,i);let a=new ResizeObserver(i);return a.observe(n),()=>a.disconnect()},[e,t]),t?n:null}function O(e){let[t,n]=(0,T.useState)(()=>window.matchMedia(`(orientation: portrait)`).matches);return(0,T.useEffect)(()=>{if(e)return;let t=window.matchMedia(`(orientation: portrait)`),r=e=>n(e.matches);return n(t.matches),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),e??(t?`portrait`:`landscape`)}function k(e){let{t}=n(),r=1-(e.backgroundTransparency??0)/100,i={"--overlay-background-alpha":r,"--overlay-identity-alpha":r*.9,"--overlay-panel-alpha":r*.88};(0,T.useLayoutEffect)(()=>{if(r===1)return;let e=document.body.style.backgroundColor;return document.body.style.backgroundColor=`transparent`,()=>{document.body.style.backgroundColor=e}},[r]);let a=O(e.layout),{camera:o,name:s,model:c,filename:l,status:u,state:d,progress:p,layers:g,remaining:_,eta:v,temperatures:y}=e,b=S(e.progressBackground),x=l||u||p!=null||g||_||v||y.length>0,C=o?.rotation??0,w=Math.abs(C%180)===90,k=(0,T.useRef)(null),A=D(k,w&&o!=null),j=[{key:`layers`,icon:(0,E.jsx)(m,{}),label:t(`streamOverlay.layer`),value:g},{key:`remaining`,icon:(0,E.jsx)(ee,{}),label:t(`streamOverlay.remaining`),value:_},{key:`eta`,icon:(0,E.jsx)(f,{}),label:t(`streamOverlay.eta`),value:v}].filter(e=>e.value!=null);return(0,E.jsxs)(`div`,{className:`updated-overlay`,"data-size":e.size,"data-layout":a,"data-state":d,style:i,children:[(0,E.jsxs)(`header`,{className:`updated-overlay__header`,children:[(s||c)&&(0,E.jsxs)(`div`,{className:`updated-overlay__identity`,children:[(0,E.jsx)(h,{"aria-hidden":`true`}),(0,E.jsxs)(`div`,{children:[s&&(0,E.jsx)(`strong`,{children:s}),c&&(0,E.jsx)(`span`,{children:c})]})]}),(0,E.jsxs)(`div`,{className:`updated-overlay__logo flex flex-col items-end`,children:[e.customLogo,(0,E.jsx)(`a`,{href:`https://github.com/maziggy/bambuddy`,target:`_blank`,rel:`noopener noreferrer`,children:(0,E.jsx)(`img`,{src:`/img/bambuddy_logo_powered_by.png`,alt:`Bambuddy`})})]})]}),o&&(0,E.jsx)(`div`,{className:`updated-overlay__camera`,ref:k,children:(0,E.jsx)(`img`,{ref:o.imgRef,src:o.url,alt:t(`streamOverlay.cameraStream`),style:{transform:`translate(-50%, -50%) rotate(${C}deg)`,...w&&A?{width:A.height,height:A.width}:{}},onError:o.onError})}),x&&(0,E.jsxs)(`section`,{className:`updated-overlay__panel`,children:[(l||u)&&(0,E.jsxs)(`div`,{className:`updated-overlay__summary`,children:[l&&(0,E.jsx)(`h1`,{children:l}),u&&(0,E.jsxs)(`div`,{className:`updated-overlay__status`,children:[(0,E.jsx)(`span`,{"aria-hidden":`true`}),u]})]}),p!=null&&(0,E.jsxs)(`div`,{className:`updated-overlay__progress`,children:[(0,E.jsx)(`span`,{style:b,children:t(`streamOverlay.progress`)}),(0,E.jsx)(`div`,{role:`progressbar`,"aria-label":t(`streamOverlay.progress`),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":p,children:(0,E.jsx)(`div`,{style:{width:`${p}%`,background:e.progressBackground}})}),(0,E.jsxs)(`strong`,{style:b,children:[Math.round(p),`%`]})]}),(j.length>0||y.length>0)&&(0,E.jsxs)(`div`,{className:`updated-overlay__readings`,children:[j.length>0&&(0,E.jsx)(`div`,{className:`updated-overlay__stats`,children:j.map(e=>(0,E.jsxs)(`div`,{className:`updated-overlay__reading`,children:[e.icon,(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`span`,{children:e.label}),(0,E.jsx)(`strong`,{children:e.value})]})]},e.key))}),y.length>0&&(0,E.jsx)(`div`,{className:`updated-overlay__temperatures`,children:y.map(e=>(0,E.jsxs)(`div`,{className:`updated-overlay__reading`,children:[e.icon,(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`span`,{children:e.label}),(0,E.jsxs)(`strong`,{children:[Math.round(e.current),`°C`,e.target!=null&&e.target>0&&Math.round(e.target)!==Math.round(e.current)&&(0,E.jsxs)(`small`,{children:[` / `,Math.round(e.target),`°C`]})]})]})]},e.key))})]})]})]})}var A=6e4,j=3e3,M=200;function te(e){let[t,n]=(0,T.useState)(Date.now),[r,i]=(0,T.useState)(!1),a=(0,T.useRef)(null),o=(0,T.useRef)(null),s=(0,T.useCallback)(()=>{a.current?.removeAttribute(`src`),i(!0)},[]),c=(0,T.useCallback)(()=>{o.current!==null&&(clearTimeout(o.current),o.current=null),i(!1),n(e=>e+1)},[]);return(0,T.useEffect)(()=>{if(!e)return;let t=setTimeout(s,A-M),n=setTimeout(c,A);return()=>{clearTimeout(t),clearTimeout(n),o.current!==null&&(clearTimeout(o.current),o.current=null),i(!1)}},[e,t,c,s]),{imageKey:t,closing:r,imgRef:a,handleStreamError:(0,T.useCallback)(t=>{!e||o.current!==null||t&&!t.currentTarget.getAttribute(`src`)||(s(),o.current=setTimeout(c,j))},[e,c,s])}}function ne(e,t,n){if(!e)return``;if(!t)return e;let r=t.match(/plate_(\d+)\.gcode/);return r&&parseInt(r[1],10)>1?`${e} — ${n(`printers.plateNumber`,`Plate {{number}}`,{number:r[1]})}`:e}function re(e){let t=e.get(`show`)?.split(`,`)||[`progress`,`layers`,`eta`,`filename`,`status`],n=parseInt(e.get(`fps`)||`15`,10),r=Math.min(Math.max(isNaN(n)?15:n,1),30),i=e.get(`camera`),a=i!==`false`&&i!==`0`,o=Number(e.get(`backgroundTransparency`)),s=Number.isFinite(o)?Math.min(100,Math.max(0,o)):0,c=e.get(`layout`);return{layout:c===`portrait`||c===`landscape`?c:null,backgroundTransparency:s,size:e.get(`size`)||`medium`,fps:r,updatedArtwork:e.get(`artwork`)===`2`,showCamera:a,showProgress:t.includes(`progress`),showLayers:t.includes(`layers`),showEta:t.includes(`eta`),showFilename:t.includes(`filename`),showStatus:t.includes(`status`),showPrinter:t.includes(`printer`),showModel:t.includes(`model`),showNozzle:t.includes(`nozzle`),showBed:t.includes(`bed`),showChamber:t.includes(`chamber`)}}function ie(e,t){if(e.stg_cur_name)return e.stg_cur_name;switch(e.state){case`RUNNING`:return t(`streamOverlay.status.printing`);case`PAUSE`:return t(`streamOverlay.status.paused`);case`FINISH`:return t(`streamOverlay.status.finished`);case`FAILED`:return t(`streamOverlay.status.failed`);case`IDLE`:return t(`streamOverlay.status.idle`);default:return e.state||t(`streamOverlay.status.unknown`)}}function N(e,t){let n=e[t];return typeof n==`number`?n:null}function ae({icon:e,label:t,current:n,target:r,sizes:i}){let a=r!=null&&r>0&&Math.round(r)!==Math.round(n);return(0,E.jsxs)(`div`,{className:`flex items-center ${i.gap} text-white/70`,children:[e,(0,E.jsxs)(`span`,{className:`classic-overlay__text ${i.text}`,children:[(0,E.jsx)(`span`,{className:`mr-1`,children:t}),(0,E.jsxs)(`span`,{className:`text-white`,children:[Math.round(n),`°C`]}),a&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`span`,{className:`mx-1`,children:`/`}),(0,E.jsxs)(`span`,{children:[Math.round(r),`°C`]})]})]})]})}function oe(e){switch(e){case`small`:return{container:`p-3`,text:`text-sm`,textLarge:`text-lg`,progressHeight:`h-2`,icon:`w-3 h-3`,gap:`gap-2`,logoHeight:`h-12`};case`large`:return{container:`p-6`,text:`text-xl`,textLarge:`text-3xl`,progressHeight:`h-4`,icon:`w-6 h-6`,gap:`gap-4`,logoHeight:`h-24`};default:return{container:`p-4`,text:`text-base`,textLarge:`text-xl`,progressHeight:`h-3`,icon:`w-4 h-4`,gap:`gap-3`,logoHeight:`h-16`}}}function P(){let{printerId:e}=s(),[i]=c(),{t:o}=n(),D=l(),O=parseInt(e||`0`,10),A=(0,T.useMemo)(()=>re(i),[i]),j=oe(A.size),M=i.get(`token`),P=M!=null&&M!==``,F=C(i.get(`logo`)===`1`,M),I=b(i.get(`progressFrom`),i.get(`progressTo`)),L=S(I),R=F?(0,E.jsx)(`img`,{src:F,alt:o(`streamOverlay.branding.logo`),className:`mb-2 object-contain`,style:{maxHeight:A.layout?x[A.layout].height*.14:`14vh`,maxWidth:A.layout?x[A.layout].width*.2:`20vw`}}):null,{data:z}=u({queryKey:[`overlayStatus`,O,M],queryFn:()=>r.getOverlayStatus(O,M??void 0),enabled:O>0&&P,refetchInterval:2e3}),{data:B}=u({queryKey:[`printer`,O],queryFn:()=>r.getPrinter(O),enabled:O>0&&!P}),{data:se}=u({queryKey:[`printerStatus`,O],queryFn:()=>r.getPrinterStatus(O),enabled:O>0&&!P,refetchInterval:2e3}),{data:ce}=u({queryKey:[`settings`],queryFn:r.getSettings,enabled:!P}),V=(0,T.useMemo)(()=>P?z&&{name:z.name,model:z.model,camera_rotation:z.camera_rotation}:B,[P,z,B]),H=[A.showPrinter?V?.name:null,A.showModel?y(V?.model??null):null].filter(Boolean).join(` · `),U=P?z:se,{imageKey:W,closing:G,imgRef:K,handleStreamError:le}=te(O>0&&A.showCamera&&U!=null),ue=(P?z?.time_format:ce?.time_format)||`system`;if((0,T.useEffect)(()=>{if(!O||P)return;let e=null,t=!1;return(async()=>{let n;try{n=(await r.getWebSocketToken()).token}catch(e){let t=e instanceof a?e.status:0;if(t===401||t===403)return}if(t)return;let i=window.location.protocol===`https:`?`wss:`:`ws:`,o=n?`?token=${encodeURIComponent(n)}`:``,s=`${i}//${window.location.host}/api/v1/ws${o}`;e=new WebSocket(s),e.onmessage=e=>{try{let t=JSON.parse(e.data);t.type===`printer_status`&&t.printer_id===O&&D.setQueryData([`printerStatus`,O],e=>e?{...e,...t.data}:t.data)}catch{}},e.onerror=()=>{}})(),()=>{t=!0,e&&e.close()}},[O,P,D]),(0,T.useEffect)(()=>(document.title=V?`${V.name} - ${o(`streamOverlay.title`)}`:o(`streamOverlay.title`),()=>{document.title=`Bambuddy`}),[V,o]),!O)return(0,E.jsx)(`div`,{className:`min-h-screen bg-black flex items-center justify-center`,children:(0,E.jsx)(`p`,{className:`text-white`,children:o(`streamOverlay.invalidPrinterId`)})});if(!U)return(0,E.jsx)(`div`,{className:`min-h-screen bg-black flex items-center justify-center`,children:(0,E.jsx)(`p`,{className:`text-gray-400`,children:o(`common.loading`)})});let q=U.connected&&(U.state===`RUNNING`||U.state===`PAUSE`),J=U.progress||0,Y=U.temperatures??{},X=[];if(A.showNozzle){let e=N(Y,`nozzle`),t=N(Y,`nozzle_2`);e!=null&&X.push({key:`nozzle`,icon:(0,E.jsx)(p,{className:`classic-overlay__icon ${j.icon}`}),label:o(`printers.heaterHistory.nozzle`,`Nozzle`),current:e,target:N(Y,`nozzle_target`)}),t!=null&&X.push({key:`nozzle_2`,icon:(0,E.jsx)(p,{className:`classic-overlay__icon ${j.icon}`}),label:o(`printers.heaterHistory.nozzle2`,`Nozzle 2`),current:t,target:N(Y,`nozzle_2_target`)})}if(A.showBed){let e=N(Y,`bed`);e!=null&&X.push({key:`bed`,icon:(0,E.jsx)(g,{className:`classic-overlay__icon ${j.icon}`}),label:o(`printers.heaterHistory.bed`,`Bed`),current:e,target:N(Y,`bed_target`)})}if(A.showChamber){let e=N(Y,`chamber`);e!=null&&X.push({key:`chamber`,icon:(0,E.jsx)(d,{className:`classic-overlay__icon ${j.icon}`}),label:o(`printers.heaterHistory.chamber`,`Chamber`),current:e,target:N(Y,`chamber_target`)})}let de=`/api/v1/printers/${O}/camera/stream?fps=${A.fps}&t=${W}`,Z=P&&M?`${de}&token=${encodeURIComponent(M)}`:t(de);if(A.updatedArtwork){let e=U.connected&&q,t=U.remaining_time,n=e&&A.showEta&&t!=null&&t>0,r=(0,E.jsx)(k,{layout:A.layout??void 0,backgroundTransparency:A.backgroundTransparency,customLogo:R,progressBackground:I,size:A.size,camera:A.showCamera?{url:G?void 0:Z,rotation:V?.camera_rotation??0,onError:le,imgRef:K}:null,name:A.showPrinter?V?.name??null:null,model:A.showModel&&y(V?.model??null)||null,filename:A.showFilename&&U.current_print?ne(U.current_print.replace(/\.gcode\.3mf$|\.3mf$|\.gcode$/i,``),U.gcode_file,o):null,status:A.showStatus?U.connected?ie(U,o):o(`streamOverlay.printerOffline`):null,state:U.connected?U.state:null,progress:e&&A.showProgress?Math.min(100,Math.max(0,Number.isFinite(J)?J:0)):null,layers:e&&A.showLayers&&U.layer_num!=null&&U.total_layers!=null&&U.total_layers>0?`${U.layer_num} / ${U.total_layers}`:null,remaining:n?v(t*60):null,eta:n?_(t,ue,o):null,temperatures:U.connected?X:[]});return A.layout?(0,E.jsx)(w,{layout:A.layout,children:r}):r}let Q=A.layout?x[A.layout]:null,$=V?.camera_rotation??0,fe=Math.abs($%180)===90,pe=(0,E.jsxs)(`div`,{className:`classic-overlay min-h-screen bg-black relative overflow-hidden`,"data-layout":A.layout??void 0,"data-size":A.size,children:[A.showCamera&&(0,E.jsx)(`img`,{ref:K,src:G?void 0:Z,alt:o(`streamOverlay.cameraStream`),className:`absolute inset-0 w-full h-full object-contain`,style:Q?{left:`50%`,top:`50%`,maxWidth:`none`,width:fe?Q.height:Q.width,height:fe?Q.width:Q.height,transform:`translate(-50%, -50%) rotate(${$}deg)`}:$?{transform:`rotate(${$}deg)`}:void 0,onError:le},W),(0,E.jsxs)(`div`,{className:`absolute top-4 right-4 z-10 flex flex-col items-end`,children:[R,(0,E.jsx)(`a`,{href:`https://github.com/maziggy/bambuddy`,target:`_blank`,rel:`noopener noreferrer`,children:(0,E.jsx)(`img`,{src:`/img/bambuddy_logo_dark_transparent.png`,alt:`Bambuddy`,className:`classic-overlay__logo ${j.logoHeight} object-contain drop-shadow-lg hover:scale-105 transition-transform`})})]}),(0,E.jsx)(`div`,{className:`absolute bottom-0 left-0 right-0 z-10 bg-gradient-to-t from-black/80 via-black/60 to-transparent`,children:(0,E.jsxs)(`div`,{className:`classic-overlay__panel ${j.container}`,children:[H&&(0,E.jsxs)(`div`,{className:`flex items-center ${j.gap} mb-2`,children:[(0,E.jsx)(h,{className:`classic-overlay__icon ${j.icon} shrink-0 text-white/70`}),(0,E.jsx)(`span`,{className:`classic-overlay__text ${j.text} min-w-0 truncate text-white font-medium`,children:H})]}),A.showFilename&&U.current_print&&(0,E.jsx)(`div`,{className:`classic-overlay__filename ${j.textLarge} text-white font-semibold mb-2 truncate drop-shadow-md`,children:ne(U.current_print.replace(/\.gcode\.3mf$|\.3mf$|\.gcode$/i,``),U.gcode_file,o)}),A.showStatus&&(0,E.jsx)(`div`,{className:`classic-overlay__text ${j.text} text-white/70 mb-2`,children:U.connected?ie(U,o):o(`streamOverlay.printerOffline`)}),A.showProgress&&q&&(0,E.jsxs)(`div`,{className:`mb-3`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between mb-1 classic-overlay__text ${j.text}`,children:[(0,E.jsx)(`span`,{className:`text-white/70`,style:L,children:o(`streamOverlay.progress`)}),(0,E.jsxs)(`span`,{className:`text-white font-bold`,style:L,children:[Math.round(J),`%`]})]}),(0,E.jsx)(`div`,{className:`w-full bg-white/20 rounded-full ${j.progressHeight}`,children:(0,E.jsx)(`div`,{className:`bg-bambu-green ${j.progressHeight} rounded-full transition-all duration-500`,style:{width:`${J}%`,background:I}})})]}),q&&(A.showLayers||A.showEta)&&(0,E.jsxs)(`div`,{className:`flex items-center ${j.gap} flex-wrap`,children:[A.showLayers&&U.layer_num!=null&&U.total_layers!=null&&U.total_layers>0&&(0,E.jsxs)(`div`,{className:`flex items-center ${j.gap} text-white/70`,children:[(0,E.jsx)(m,{className:`classic-overlay__icon ${j.icon}`}),(0,E.jsxs)(`span`,{className:`classic-overlay__text ${j.text}`,children:[(0,E.jsx)(`span`,{className:`text-white`,children:U.layer_num}),(0,E.jsx)(`span`,{className:`mx-1`,children:`/`}),(0,E.jsx)(`span`,{children:U.total_layers})]})]}),A.showEta&&U.remaining_time!=null&&U.remaining_time>0&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`flex items-center ${j.gap} text-white/70`,children:[(0,E.jsx)(ee,{className:`classic-overlay__icon ${j.icon}`}),(0,E.jsx)(`span`,{className:`classic-overlay__text ${j.text} text-white`,children:v(U.remaining_time*60)})]}),(0,E.jsxs)(`div`,{className:`flex items-center ${j.gap} text-white/70`,children:[(0,E.jsx)(f,{className:`classic-overlay__icon ${j.icon}`}),(0,E.jsxs)(`span`,{className:`classic-overlay__text ${j.text} text-white`,children:[o(`streamOverlay.eta`),` `,_(U.remaining_time,ue,o)]})]})]})]}),X.length>0&&U.connected&&(0,E.jsx)(`div`,{className:`flex items-center ${j.gap} flex-wrap mt-2`,children:X.map(e=>(0,E.jsx)(ae,{icon:e.icon,label:e.label,current:e.current,target:e.target,sizes:j},e.key))})]})})]});return A.layout?(0,E.jsx)(w,{layout:A.layout,children:pe}):pe}export{P as StreamOverlayPage};