PageSourceSearch

https://faturapro-ks.org/assets/PointOfSale-9dDZH0SK.js

js faturapro-ks.org collected 2026-09-25 14:53:24 UTC 291,928 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CzDHRh-U.js","assets/react-vendor-CXDp7s6y.js","assets/ui-vendor-Ci8XLkBu.js","assets/pdf-vendor-Bf4LOC2T.js","assets/supabase-vendor-BT-4XEq3.js","assets/index-BG_Sw1fe.css"])))=>i.map(i=>d[i]);
2import{E as Yi,_ as Ji}from"./pdf-vendor-Bf4LOC2T.js";import{j as e,u as Fa,h as eo,a as Kr,L as ua,i as Ma,c as qa}from"./react-vendor-CXDp7s6y.js";import{r as d,b8 as zs,x as ss,j as is,L as qt,aN as An,aa as to,bs as ro,bd as Ls,ai as Us,b7 as Bs,ap as Ka,s as $r,bQ as os,S as ma,bc as ls,by as no,bR as ao,aX as so,bS as io,bT as oo,bA as En,b0 as Rn,I as On,bU as lo,ax as pa,av as $s,bk as ha,aQ as Vs,aL as co,ah as cs,D as Ur,a1 as ba,bL as uo,bm as Ir,bj as pn,bV as mo,bq as cn,bW as za,X as Er,a0 as po,as as ho,bX as bo,bY as xo,V as fo,T as go,bZ as xa,a7 as Hs,b_ as ds,a6 as La,a5 as Fn,bp as ea,b$ as ta,c0 as Ws,bP as Mn,c1 as fa,bH as vo,F as ga,bO as jo,ar as Gs,J as yo,a3 as ko,c2 as No,c3 as us,c4 as wo,bo as Qs,p as _o,c5 as So,c6 as Co,c7 as Po,c8 as To,c9 as Io,ca as Do,C as Ao,cb as Eo,cc as Ro,cd as Oo,ce as Fo,cf as Mo,cg as qo,ch as Ko}from"./ui-vendor-Ci8XLkBu.js";import{aW as nn,aN as xn,aU as Gn,aS as zo,aX as Br,aO as Mr,b5 as Lo,l as I,b6 as Ua,aa as Uo,b7 as dn,ap as Bo,b8 as $o,b9 as Vo,ba as Ho,bb as Wo,bc as Go,bd as Xs,be as Qo,t as f,ab as Xo,ag as Zo,c as rt,f as ct,I as nt,am as Yo,an as Jo,bf as He,bg as ms,bh as el,bi as ps,bj as tl,bk as rl,bl as en,bm as nl,az as va,_ as Nr,ad as Zs,ay as al,s as ee,e as sl,X as xr,N as At,aw as Vr,a4 as br,bn as il,aK as Ys,u as Js,o as ei,bo as ja,bp as Dr,bq as _n,br as ti,Q as gn,R as vn,U as ra,V as na,bs as Sn,bt as ya,bu as ka,bv as Na,bw as wa,bx as _a,by as Sa,bz as Cn,K as ol,bA as aa,bB as ll,bC as Ca,a1 as ri,bD as qn,bE as Pn,bF as Pa,bG as cl,bH as ni,bI as ai,aM as si,bJ as dl,i as ii,j as oi,at as Kn,h as ul,bK as li,bL as ci,bM as ml,bN as pl,bO as hl,bP as bl,bQ as xl,bR as hs,bS as fl,bT as bs,bU as gl,bV as vl,a7 as qr,bW as jl,bX as yl,bY as kl,a6 as cr,bZ as xs,E as jn,F as yn,G as kn,b_ as Ba,b$ as Nl,k as wl,a5 as Ta,c0 as _l,c1 as Sl,c2 as fs,c3 as Cl,c4 as Pl,c5 as Tl,L as Il,c6 as gs,c7 as Dl,c8 as Al,c9 as El}from"./index-CzDHRh-U.js";import{B as tn}from"./badge-Dfrz07gi.js";import{A as Rl,a as Ol,b as Fl}from"./alert-DECqRpSp.js";import{e as Ml,S as $t,a as Vt,b as Ht,c as Wt,d as Oe}from"./select-WIcEPLED.js";import{u as ql}from"./index-DmzjwkAB.js";import{u as di}from"./useInvoices-DyVQ7jWJ.js";import{u as ui}from"./usePayments-cikHNx0-.js";import{u as Kl}from"./useBankAccounts-D1jf7rlD.js";import{u as zl}from"./use-debounce-DCTL_WP0.js";import{i as zr}from"./generateInvoicePDF-cLoSIh2-.js";import{g as mi,a as Tn,b as Ll,f as wr,c as Lr,r as Ul,d as Bl,w as $l,e as Vl}
2from"./fiscalCouponPrintModel-BqzwqjAP.js";import{g as Hl}from"./invoiceNumbers-pF0oA6br.js";import{r as Wl,Q as vs}from"./customerPolicy-B1eZq2UU.js";import{v as Gl}from"./taxId-DH4-PuIY.js";import{runUltraAutomation as Ql}from"./ultraAutomation-x9aJWwri.js";import{a as pi,g as hi}from"./fiscalAutomationReadiness-BZ1P74-c.js";import{C as zn,p as Xl}from"./CouponReturnVoidDialog-_K9W2_Jo.js";import{h as Ia,b as In,l as Ln,c as sa}from"./invoiceCouponPdf-SnZxq0-9.js";import{c as Zl,h as Yl,d as Jl,e as ec,f as tc}from"./dialog-tLTEci4L.js";import{S as js}from"./switch-CGCu0SE_.js";import{B as ys}from"./BarcodeScannerDialog-DJg5ikKe.js";import{g as Nn}from"./productPricing-DHT_HvNi.js";import{n as ks}from"./atkCouponTypes-3enG8x1m.js";import{n as Ns}from"./vatNorms-SC03xWdD.js";import{a as rc,p as bi,i as Ar,o as xi,b as Da,d as nc}from"./pdfBlobActions-CWBLmyxv.js";import{h as fi,a as gi}from"./windowsLocalFiscalAuthority-opq_JLbq.js";import{b as ws}from"./realtimeManager-xCJTjPyo.js";import"./supabase-vendor-BT-4XEq3.js";import"./index-q4PzP8_Y.js";import"./index-D7hBJLMb.js";import"./autoKontabilistPro-ZFReSQGV.js";import"./accountingEngine-BKA6Pz6E.js";import"./paginatedQuery-Dp7ooMQ5.js";import"./autoReconciliation-D5P5yS15.js";import"./autoKontabilist-N1ABygHz.js";import"./atkClassifications-BodcUV8A.js";import"./accountingChart-tOVImv-T.js";import"./kosovoIncomeTax-DG0V6vGK.js";import"./atkPrintAssets-DMbiK2ZN.js";import"./format-CJhB0YaC.js";import"./differenceInCalendarDays-CrzntjZV.js";import"./textarea-tbO-05lj.js";import"./autoPaymentMatching-CyUsA-34.js";import"./useAutomationLog-D6ogyhVx.js";import"./checkbox-DMD4wWuz.js";import"./table-DlXtj1T6.js";import"./atkCouponGenerator-B8LnMJoK.js";import"./nativePrinter-DlcAg4rn.js";function ac(t,r){return d.useReducer((n,a)=>r[n][a]??n,t)}var $a="ScrollArea",[vi]=zo($a),[sc,ur]=vi($a),ji=d.forwardRef((t,r)=>{const{__scopeScrollArea:n,type:a="hover",dir:l,scrollHideDelay:o=600,...m}=t,[u,s]=d.useState(null),[j,y]=d.useState(null),[v,P]=d.useState(null),[N,O]=d.useState(null),[B,$]=d.useState(null),[b,Y]=d.useState(0),[ce,k]=d.useState(0),[Q,Ke]=d.useState(!1),[We,Fe]=d.useState(!1),w=nn(r,je=>s(je)),J=ql(l);return e.jsx(sc,{scope:n,type:a,dir:J,scrollHideDelay:o,scrollArea:u,viewport:j,onViewportChange:y,content:v,onContentChange:P,scrollbarX:N,onScrollbarXChange:O,scrollbarXEnabled:Q,onScrollbarXEnabledChange:Ke,scrollbarY:B,onScrollbarYChange:$,scrollbarYEnabled:We,onScrollbarYEnabledChange:Fe,onCornerWidthChange:Y,onCornerHeightChange:k,children:e.jsx(xn.div,{dir:J,...m,ref:w,style:{position:"relative","--radix-scroll-area-corner-width":b+"px","--radix-scroll-area-corner-height":ce+"px",...t.style}})})});ji.displayName=$a;var yi="ScrollAreaViewport",ki=d.forwardRef((t,r)=>{const{__scopeScrollArea:n,children:a,nonce:l,...o}=t,m=ur(yi,n),u=d.useRef(null),s=nn(r,u,m.onViewportChange);return e.jsxs(e.Fragment,{children:[e.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:l}),e.jsx(xn.div,{"data-radix-scroll-area-viewport":"",...o,ref:s,style:{overflowX:m.scrollbarXEnabled?"scroll":"hidden",overflowY:m.scrollbarYEnabled?"scroll":"hidden",...t.style},children:e.jsx("div",{ref:m.onContentChange,style:{minWidth:"100%",display:"table"},children:a})})]})});ki.displayName=yi;var _r="ScrollAreaScrollbar",Va=d.forwardRef((t,r)=>{const{forceMount:n,...a}=t,l=ur(_r,t.__scopeScrollArea),{onScrollbarXEnabledChange:o,onScrollbarYEnabledChange:m}=l,u=t.orientation==="horizontal";return d.useEffect(()=>(u?o(!0):m(!0),()=>{u?o(!1):m(!1)}),[u,o,m]),l.type==="hover"?e.jsx(ic,{...a,ref:r,forceMount:n}):l.type==="scroll"?e.jsx(oc,{...a,ref:r,forceMount:n}):l.type==="auto"?e.jsx(Ni,{...a,ref:r,forceMount:n}):l.type==="always"?e.jsx(Ha,{...a,ref:r}):null});Va.displayName=_r;var ic=d.forwardRef((t,r)=>{const{forceMount:n,...a}=t,l=ur(_r,t.__scopeScrollArea),[o,m]=d.useState(!1);return d.useEffect(()=>{const u=l.scrollArea;let s=0;if(u){const j=()=>{window.clearTimeout(s),m(!0)},y=()=>{s=window.setTimeout(()=>m(!1),l.scrollHideDelay)};return u.addEventListener("pointerenter",j),u.addEventListener("pointerleave",y),()=>{window.clearTimeout(s),u.removeEventListener("pointerenter",j),u.removeEventListener("pointerleave",y)}}},[l.scrollArea,l.scrollHideDelay]),e.jsx(Gn,{present:n||o,children:e.jsx(Ni,{"data-state":o?"visible":"hidden",...a,ref:r})})}),oc=d.forwardRef((t,r)=>{const{forceMount:n,...a}=t,l=ur(_r,t.__scopeScrollArea),o=t.orientation==="horizontal",m=Xn(()=>s("SCROLL_END"),100),[u,s]=ac("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return d.useEffect(()=>{if(u==="idle"){const j=window.setTimeout(()=>s("HIDE"),l.scrollHideDelay);return()=>window.clearTimeout(j)}},[u,l.scrollHideDelay,s]),d.useEffect(()=>{const j=l.viewport,y=o?"scrollLeft":"scrollTop";if(j){let v=j[y];const P=()=>{const N=j[y];v!==N&&(s("SCROLL"),m()),v=N};return j.addEventListener("scroll",P),()=>j.removeEventListener("scroll",P)}},[l.viewport,o,s,m]),e.jsx(Gn,{present:n||u!=="hidden",children:e.jsx(Ha,{"data-state":u==="hidden"?"hidden":"visible",...a,ref:r,onPointerEnter:Br(t.onPointerEnter,()=>s("POINTER_ENTER")),onPointerLeave:Br(t.onPointerLeave,()=>s("POINTER_LEAVE"))})})}),Ni=d.forwardRef((t,r)=>{const n=ur(_r,t.__scopeScrollArea),{forceMount:a,...l}=t,[o,m]=d.useState(!1),u=t.orientation==="horizontal",s=Xn(()=>
2{if(n.viewport){const j=n.viewport.offsetWidth<n.viewport.scrollWidth,y=n.viewport.offsetHeight<n.viewport.scrollHeight;m(u?j:y)}},10);return rn(n.viewport,s),rn(n.content,s),e.jsx(Gn,{present:a||o,children:e.jsx(Ha,{"data-state":o?"visible":"hidden",...l,ref:r})})}),Ha=d.forwardRef((t,r)=>{const{orientation:n="vertical",...a}=t,l=ur(_r,t.__scopeScrollArea),o=d.useRef(null),m=d.useRef(0),[u,s]=d.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),j=Pi(u.viewport,u.content),y={...a,sizes:u,onSizesChange:s,hasThumb:j>0&&j<1,onThumbChange:P=>o.current=P,onThumbPointerUp:()=>m.current=0,onThumbPointerDown:P=>m.current=P};function v(P,N){return pc(P,m.current,u,N)}return n==="horizontal"?e.jsx(lc,{...y,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){const P=l.viewport.scrollLeft,N=_s(P,u,l.dir);o.current.style.transform=`translate3d(${N}px, 0, 0)`}},onWheelScroll:P=>{l.viewport&&(l.viewport.scrollLeft=P)},onDragScroll:P=>{l.viewport&&(l.viewport.scrollLeft=v(P,l.dir))}}):n==="vertical"?e.jsx(cc,{...y,ref:r,onThumbPositionChange:()=>{if(l.viewport&&o.current){const P=l.viewport.scrollTop,N=_s(P,u);o.current.style.transform=`translate3d(0, ${N}px, 0)`}},onWheelScroll:P=>{l.viewport&&(l.viewport.scrollTop=P)},onDragScroll:P=>{l.viewport&&(l.viewport.scrollTop=v(P))}}):null}),lc=d.forwardRef((t,r)=>{const{sizes:n,onSizesChange:a,...l}=t,o=ur(_r,t.__scopeScrollArea),[m,u]=d.useState(),s=d.useRef(null),j=nn(r,s,o.onScrollbarXChange);return d.useEffect(()=>{s.current&&u(getComputedStyle(s.current))},[s]),e.jsx(_i,{"data-orientation":"horizontal",...l,ref:j,sizes:n,style:{bottom:0,left:o.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:o.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Qn(n)+"px",...t.style},onThumbPointerDown:y=>t.onThumbPointerDown(y.x),onDragScroll:y=>t.onDragScroll(y.x),onWheelScroll:(y,v)=>{if(o.viewport){const P=o.viewport.scrollLeft+y.deltaX;t.onWheelScroll(P),Ii(P,v)&&y.preventDefault()}},onResize:()=>{s.current&&o.viewport&&m&&a({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:s.current.clientWidth,paddingStart:Bn(m.paddingLeft),paddingEnd:Bn(m.paddingRight)}})}})}),cc=d.forwardRef((t,r)=>{const{sizes:n,onSizesChange:a,...l}=t,o=ur(_r,t.__scopeScrollArea),[m,u]=d.useState(),s=d.useRef(null),j=nn(r,s,o.onScrollbarYChange);return d.useEffect(()=>{s.current&&u(getComputedStyle(s.current))},[s]),e.jsx(_i,{"data-orientation":"vertical",...l,ref:j,sizes:n,style:{top:0,right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Qn(n)+"px",...t.style},onThumbPointerDown:y=>t.onThumbPointerDown(y.y),onDragScroll:y=>t.onDragScroll(y.y),onWheelScroll:(y,v)=>{if(o.viewport){const P=o.viewport.scrollTop+y.deltaY;t.onWheelScroll(P),Ii(P,v)&&y.preventDefault()}},onResize:()=>{s.current&&o.viewport&&m&&a({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:s.current.clientHeight,paddingStart:Bn(m.paddingTop),paddingEnd:Bn(m.paddingBottom)}})}})}),[dc,wi]=vi(_r),_i=d.forwardRef((t,r)=>{const{__scopeScrollArea:n,sizes:a,hasThumb:l,onThumbChange:o,onThumbPointerUp:m,onThumbPointerDown:u,onThumbPositionChange:s,onDragScroll:j,onWheelScroll:y,onResize:v,...P}=t,N=ur(_r,n),[O,B]=d.useState(null),$=nn(r,w=>B(w)),b=d.useRef(null),Y=d.useRef(""),ce=N.viewport,k=a.content-a.viewport,Q=Mr(y),Ke=Mr(s),We=Xn(v,10);function Fe(w){if(b.current){const J=w.clientX-b.current.left,je=w.clientY-b.current.top;j({x:J,y:je})}}return d.useEffect(()=>{const w=J=>{const je=J.target;O?.contains(je)&&Q(J,k)};return document.addEventListener("wheel",w,{passive:!1}),()=>document.removeEventListener("wheel",w,{passive:!1})},[ce,O,k,Q]),d.useEffect(Ke,[a,Ke]),rn(O,We),rn(N.content,We),e.jsx(dc,{scope:n,scrollbar:O,hasThumb:l,onThumbChange:Mr(o),onThumbPointerUp:Mr(m),onThumbPositionChange:Ke,onThumbPointerDown:Mr(u),children:e.jsx(xn.div,{...P,ref:$,style:{position:"absolute",...P.style},onPointerDown:Br(t.onPointerDown,w=>{w.button===0&&(w.target.setPointerCapture(w.pointerId),b.current=O.getBoundingClientRect(),Y.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",N.viewport&&(N.viewport.style.scrollBehavior="auto"),Fe(w))}),onPointerMove:Br(t.onPointerMove,Fe),onPointerUp:Br(t.onPointerUp,w=>{const J=w.target;J.hasPointerCapture(w.pointerId)&&J.releasePointerCapture(w.pointerId),document.body.style.webkitUserSelect=Y.current,N.viewport&&(N.viewport.style.scrollBehavior=""),b.current=null})})})}),Un="ScrollAreaThumb",Si=d.forwardRef((t,r)=>{const{forceMount:n,...a}=t,l=wi(Un,t.__scopeScrollArea);return e.jsx(Gn,{present:n||l.hasThumb,children:e.jsx(uc,{ref:r,...a})})}),uc=d.forwardRef((t,r)=>{const{__scopeScrollArea:n,style:a,...l}=t,o=ur(Un,n),m=wi(Un,n),{onThumbPositionChange:u}=m,s=nn(r,v=>m.onThumbChange(v)),j=d.useRef(void 0),y=Xn(()=>{j.current&&(j.current(),j.current=void 0)},100);return d.useEffect(()=>{const v=o.viewport;if(v){const P=()=>{if(y(),!j.current){const N=hc(v,u);j.current=N,u()}};return u(),v.addEventListener("scroll",P),()=>v.removeEventListener("scroll",P)}},[o.viewport,y,u]),e.jsx(xn.div,{"data-state":m.hasThumb?"visible":"hidden",...l,ref:s,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...a},onPointerDownCapture:Br(t.onPointerDownCapture,v=>{const N=v.target.getBoundingClientRect(),O=v.clientX-N.left,B=v.clientY-N.top;m.onThumbPointerDown({x:O,y:B})}),onPointerUp:Br(t.onPointerUp,m.onThumbPointerUp)})});Si.displayName=Un;var Wa="ScrollAreaCorner",Ci=d.forwardRef((t,r)=>{const n=ur(Wa,t.__scopeScrollArea),a=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&a?e.jsx(mc,{...t,ref:r}):null});Ci.displayName=Wa;var mc=d.forwardRef((t,r)=>{const{__scopeScrollArea:n,...a}
2=t,l=ur(Wa,n),[o,m]=d.useState(0),[u,s]=d.useState(0),j=!!(o&&u);return rn(l.scrollbarX,()=>{const y=l.scrollbarX?.offsetHeight||0;l.onCornerHeightChange(y),s(y)}),rn(l.scrollbarY,()=>{const y=l.scrollbarY?.offsetWidth||0;l.onCornerWidthChange(y),m(y)}),j?e.jsx(xn.div,{...a,ref:r,style:{width:o,height:u,position:"absolute",right:l.dir==="ltr"?0:void 0,left:l.dir==="rtl"?0:void 0,bottom:0,...t.style}}):null});function Bn(t){return t?parseInt(t,10):0}function Pi(t,r){const n=t/r;return isNaN(n)?0:n}function Qn(t){const r=Pi(t.viewport,t.content),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=(t.scrollbar.size-n)*r;return Math.max(a,18)}function pc(t,r,n,a="ltr"){const l=Qn(n),o=l/2,m=r||o,u=l-m,s=n.scrollbar.paddingStart+m,j=n.scrollbar.size-n.scrollbar.paddingEnd-u,y=n.content-n.viewport,v=a==="ltr"?[0,y]:[y*-1,0];return Ti([s,j],v)(t)}function _s(t,r,n="ltr"){const a=Qn(r),l=r.scrollbar.paddingStart+r.scrollbar.paddingEnd,o=r.scrollbar.size-l,m=r.content-r.viewport,u=o-a,s=n==="ltr"?[0,m]:[m*-1,0],j=Ml(t,s);return Ti([0,m],[0,u])(j)}function Ti(t,r){return n=>{if(t[0]===t[1]||r[0]===r[1])return r[0];const a=(r[1]-r[0])/(t[1]-t[0]);return r[0]+a*(n-t[0])}}function Ii(t,r){return t>0&&t<r}var hc=(t,r=()=>{})=>{let n={left:t.scrollLeft,top:t.scrollTop},a=0;return function l(){const o={left:t.scrollLeft,top:t.scrollTop},m=n.left!==o.left,u=n.top!==o.top;(m||u)&&r(),n=o,a=window.requestAnimationFrame(l)}(),()=>window.cancelAnimationFrame(a)};function Xn(t,r){const n=Mr(t),a=d.useRef(0);return d.useEffect(()=>()=>window.clearTimeout(a.current),[]),d.useCallback(()=>{window.clearTimeout(a.current),a.current=window.setTimeout(n,r)},[n,r])}function rn(t,r){const n=Mr(r);Lo(()=>{let a=0;if(t){const l=new ResizeObserver(()=>{cancelAnimationFrame(a),a=window.requestAnimationFrame(n)});return l.observe(t),()=>{window.cancelAnimationFrame(a),l.unobserve(t)}}},[t,n])}var Di=ji,bc=ki,xc=Ci;const Aa=d.forwardRef(({className:t,children:r,...n},a)=>e.jsxs(Di,{ref:a,className:I("relative overflow-hidden",t),...n,children:[e.jsx(bc,{className:"h-full w-full rounded-[inherit]",children:r}),e.jsx(Ai,{}),e.jsx(xc,{})]}));Aa.displayName=Di.displayName;const Ai=d.forwardRef(({className:t,orientation:r="vertical",...n},a)=>e.jsx(Va,{ref:a,orientation:r,className:I("flex touch-none select-none transition-colors",r==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",r==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",t),...n,children:e.jsx(Si,{className:"relative flex-1 rounded-full bg-border"})}));Ai.displayName=Va.displayName;const fn="canonical-pos-fiscal-v1",fc=Object.freeze({onlineAtk:!0,offlineOutbox:!0,citizenCouponQr:!0,discounts:!0,sale:!0,cancel:!0,return:!0,retryIdempotency:!0,sharedPrintModel:!0}),dr=(t,r)=>Object.freeze({category:t,...r,sharedFiscalEngine:fn,supports:fc}),gc=Object.freeze({general:dr("general",{designId:"catalog-shell",label:"Generic / E-commerce POS",presentation:"catalog-first",density:"balanced",touchOptimized:!0,keyboardOptimized:!0}),retail_market:dr("retail_market",{designId:"retail-workspace",label:"Retail / Market POS",presentation:"barcode-first",density:"dense",touchOptimized:!0,keyboardOptimized:!0}),pharmacy:dr("pharmacy",{designId:"catalog-shell",label:"Pharmacy POS",presentation:"barcode-first",density:"dense",touchOptimized:!0,keyboardOptimized:!0}),medical_clinic:dr("medical_clinic",{designId:"catalog-shell",label:"Medical / Clinic POS",presentation:"service-first",density:"balanced",touchOptimized:!0,keyboardOptimized:!0}),auto_mechanic:dr("auto_mechanic",{designId:"catalog-shell",label:"Auto Mechanic / Service POS",presentation:"service-first",density:"balanced",touchOptimized:!0,keyboardOptimized:!0}),restaurant_cafe:dr("restaurant_cafe",{designId:"restaurant-workspace",label:"Restaurant / Cafe POS",presentation:"catalog-first",density:"touch",touchOptimized:!0,keyboardOptimized:!0}),wholesale:dr("wholesale",{designId:"catalog-shell",label:"Wholesale POS",presentation:"service-first",density:"dense",touchOptimized:!0,keyboardOptimized:!0}),services:dr("services",{designId:"catalog-shell",label:"Professional Services POS",presentation:"service-first",density:"balanced",touchOptimized:!0,keyboardOptimized:!0}),construction:dr("construction",{designId:"catalog-shell",label:"Construction Materials POS",presentation:"service-first",density:"dense",touchOptimized:!0,keyboardOptimized:!0}),hotel_motel:dr("hotel_motel",{designId:"catalog-shell",label:"Hotel / Motel POS",presentation:"service-first",density:"balanced",touchOptimized:!0,keyboardOptimized:!0}),fuel_station:dr("fuel_station",{designId:"catalog-shell",label:"Fuel Station POS",presentation:"catalog-first",density:"dense",touchOptimized:!0,keyboardOptimized:!0}),taxi:dr("taxi",{designId:"taxi-workspace",label:"Taxi POS",presentation:"trip-first",density:"touch",touchOptimized:!0,keyboardOptimized:!0})});function Ei(t){return gc[t]}
2const vc={ready:{label:"Online · ATK gati",defaultDetail:"POS-i është i lidhur dhe gati për shitje."},offline:{label:"Offline",defaultDetail:"Kuponët ruhen lokalisht dhe dërgohen automatikisht kur rikthehet lidhja."},saving:{label:"Duke ruajtur",defaultDetail:"Transaksioni po ruhet në ledger."},pending:{label:"Në pritje për ATK",defaultDetail:"Kuponi është ruajtur dhe pret transmetim."},transmitting:{label:"Duke transmetuar",defaultDetail:"Po pritet përgjigjja e persistuar nga ATK."},acknowledged:{label:"ATK pranoi",defaultDetail:"Përgjigjja e ATK-së është ruajtur me sukses."},rejected:{label:"ATK refuzoi",defaultDetail:"Kuponi u refuzua; transaksioni nuk duhet të ridërgohet verbërisht."},unknown:{label:"Status i panjohur",defaultDetail:"Përgjigjja nuk u konfirmua; kërkohet reconciliation."},retry:{label:"Retry i planifikuar",defaultDetail:"Sistemi do ta provojë përsëri me të njëjtin idempotency key."}},jc={ready:is,offline:to,saving:qt,pending:An,transmitting:qt,acknowledged:is,rejected:ss,unknown:ss,retry:zs},yc={ready:"border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",offline:"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300",saving:"border-blue-500/30 bg-blue-500/10 text-blue-700 dark:text-blue-300",pending:"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300",transmitting:"border-blue-500/30 bg-blue-500/10 text-blue-700 dark:text-blue-300",acknowledged:"border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",rejected:"border-red-500/30 bg-red-500/10 text-red-700 dark:text-red-300",unknown:"border-orange-500/30 bg-
2orange-500/10 text-orange-700 dark:text-orange-300",retry:"border-violet-500/30 bg-violet-500/10 text-violet-700 dark:text-violet-300"};function Zn({status:t,pendingCount:r=0,detail:n,compact:a=!1,className:l}){const o=vc[t],m=jc[t],u=Math.max(0,Math.trunc(Number(r)||0)),s=u>0&&["offline","pending","retry"].includes(t)?`${o.label} · ${u} në pritje`:o.label;return e.jsxs("div",{className:I("inline-flex min-w-0 items-center gap-2 rounded-2xl border px-3 py-1.5 text-xs font-semibold",yc[t],l),role:"status","aria-live":"polite","aria-label":`${s}. ${n||o.defaultDetail}`,title:n||o.defaultDetail,children:[e.jsx(m,{className:I("h-3.5 w-3.5 shrink-0",["saving","transmitting"].includes(t)&&"animate-spin")}),e.jsx("span",{className:I("truncate",a&&"sr-only sm:not-sr-only"),children:s})]})}function Ri({networkOnline:t,forcedOffline:r=!1,isSaving:n=!1,isTransmitting:a=!1,readinessState:l}){return!t||r?"offline":a?"transmitting":n?"saving":l==="syncing"?"transmitting":l==="attention"?"pending":"ready"}function Ga(t){const r=Number(t);return Number.isFinite(r)?Math.min(100,Math.max(0,r)):0}function Oi(t){return Number.isFinite(t)?Math.round((t+Number.EPSILON)*100)/100:0}function Mt(t){return Number.isFinite(t)?Math.max(0,Xs(Ua(t),1)):0}function Ss(t){return Number.isFinite(t)?Xs(Ua(t,1e4),1e4):0}function le(t){return Oi(Math.max(0,t)/100)}function kc(t,r){const n=t.map(()=>0),a=t.map(y=>Math.max(0,Math.trunc(y))),l=a.reduce((y,v)=>y+BigInt(v),0n),o=BigInt(Math.max(0,Math.trunc(r)));if(o<=0n||l<=0n)return n;const m=o<l?o:l;if(m>BigInt(Number.MAX_SAFE_INTEGER))throw new RangeError("POS receipt discount exceeds the safe integer-cent range");const u=a.map(y=>Number(BigInt(y)*m/l));let s=Number(m)-u.reduce((y,v)=>y+v,0);return a.map((y,v)=>({weight:y,index:v})).filter(y=>y.weight>0).sort((y,v)=>v.weight-y.weight||y.index-v.index).forEach(({weight:y,index:v})=>{const P=Math.min(Math.max(0,y-u[v]),s);n[v]=u[v]+P,s-=P}),n}function Nc(t,r){const n=t.map(s=>Math.max(0,Math.trunc(s)));if(n.some(s=>!Number.isSafeInteger(s)))throw new RangeError("POS header discount line weight exceeds the safe integer-cent range");const a=n.reduce((s,j)=>s+BigInt(j),0n),l=BigInt(Math.max(0,Math.trunc(r)));if(l<=0n||a<=0n)return t.map(()=>0);const o=l<a?l:a,m=n.map(s=>{const j=BigInt(s)*o*2n+a;return Number(j/(2n*a))});let u=Number(o)-m.reduce((s,j)=>s+j,0);for(let s=m.length-1;s>=0&&u!==0;s-=1){const j=n[s];if(u>0){const y=Math.min(j-m[s],u);m[s]=m[s]+y,u-=y}else{const y=Math.min(m[s],-u);m[s]=m[s]-y,u+=y}}if(u!==0)throw new Error("POS header-discount cents could not be allocated without a negative line");return m}function wc(t,r,n){const a=Math.max(0,t.grossAfterProductDiscountCents-n),l=t.taxRate>0?Number((BigInt(a)*BigInt(Math.round(t.taxRate*1e4))*2n+BigInt(Math.round((100+t.taxRate)*1e4)))/(2n*BigInt(Math.round((100+t.taxRate)*1e4)))):0,o=Math.max(0,a-l),m=Math.max(0,t.netAfterProductDiscountCents-o),u=t.grossBeforeDiscountCents>0?Number(((1-a/t.grossBeforeDiscountCents)*100).toFixed(4)):0;return{...r,subtotalDiscountNet:le(m),discountAmount:le(Mt(t.productDiscountNet)+m),manualDiscountAmount:le(m),netTotal:le(o),taxTotal:le(l),total:le(a),grossManualDiscountTotal:le(n),grossDiscountTotal:le(t.grossBeforeDiscountCents-a),receiptDiscountGross:le(n),receiptDiscountNet:le(m),grossLineTotal:le(a),effectiveDiscountPercent:u}}function Fi(t,r){return kc(t,r)}function _c(t){const r=Math.max(0,Number(t.quantity)||0),n=Math.max(0,Number(t.price)||0),a=Math.max(0,Number(t.taxRate)||0),l=Ga(t.discountPercent),o=Uo(a),m=Number(dn(String(n),o)),u=t.productDiscountAmount??t.discountAmount,s=Number(u!=null&&Number.isFinite(Number(u))?dn(Math.max(0,n-Bo(Math.max(0,Number(u)),Math.max(r,1),1e4)).toFixed(4),o):dn(String(n),o,l)),j=$o(r,n,0,1e4),y=Number.isFinite(Number(u))?Ss(Math.max(0,Number(u))):Vo(r,n,l,1e4),v=Math.min(j,y),P=Ho(r,n,v,1e4),N=Wo(r,n,a,0,1e4),O=Go(r,n,a,v,1e4),B=Mt(j),$=Mt(P),b=Mt(N),Y=Mt(O);return{grossNetBeforeDiscount:le(B),grossNetBeforeDiscountExact:j,productDiscountNet:v,netAfterProductDiscount:le($),netAfterProductDiscountCents:$,grossBeforeDiscountCents:b,grossAfterProductDiscountCents:Y,grossProductDiscountExact:Ss(Math.max(0,N-O)),grossUnitPriceBeforeProductDiscount:m,grossUnitPriceAfterProductDiscount:s,taxRate:a,quantity:r}}function Sc(t,r,n){const a=Math.min(t.netAfterProductDiscountCents,Math.max(0,Math.trunc(r))),l=Math.max(0,t.netAfterProductDiscountCents-a),o=a>
20?Math.max(0,Mt(Qo(le(l),t.taxRate))):Math.max(0,t.grossAfterProductDiscountCents-l),m=l+o,u=Math.max(0,t.grossAfterProductDiscountCents-m),s=a,j=t.grossNetBeforeDiscountExact>0?Number((t.productDiscountNet/t.grossNetBeforeDiscountExact*100).toFixed(4)):0,y=t.grossBeforeDiscountCents>0?Number(((1-m/t.grossBeforeDiscountCents)*100).toFixed(4)):0;return{grossNetBeforeDiscount:t.grossNetBeforeDiscount,netAfterProductDiscount:t.netAfterProductDiscount,productDiscountNet:t.productDiscountNet,subtotalDiscountNet:le(s),discountAmount:le(Mt(t.productDiscountNet)+s),manualDiscountAmount:le(s),netTotal:le(l),taxTotal:le(o),total:le(m),grossBeforeDiscount:le(t.grossBeforeDiscountCents),grossAfterProductDiscount:le(t.grossAfterProductDiscountCents),grossUnitPriceBeforeProductDiscount:t.grossUnitPriceBeforeProductDiscount,grossUnitPriceAfterProductDiscount:t.grossUnitPriceAfterProductDiscount,grossProductDiscountTotal:t.grossProductDiscountExact,grossManualDiscountTotal:le(u),grossDiscountTotal:le(t.grossBeforeDiscountCents-m),receiptDiscountGross:le(u),receiptDiscountNet:le(s),grossLineTotal:le(m),effectiveDiscountPercent:j>0&&n>0?Number((100-(100-j)*(1-n/100)).toFixed(4)):y}}function Cc(t,r={}){const n=t.map(_c),a=n.map(k=>k.netAfterProductDiscountCents),l=a.reduce((k,Q)=>k+Q,0),o=Ga(r.subtotalDiscountPercent),m=Number(r.subtotalDiscountAmount),u=BigInt(Ua(o,1e4)),s=Number((BigInt(l)*u+500000n)/1000000n),j=Number.isFinite(m)?Math.min(l,Mt(Math.max(0,m))):Math.min(l,s),y=Fi(a,j);let v=n.map((k,Q)=>Sc(k,y[Q]||0,o));const P=n.reduce((k,Q)=>k+Q.grossAfterProductDiscountCents,0),N=v.reduce((k,Q)=>k+Mt(Q.total),0),O=Math.max(0,P-N);if(O>0){const k=Nc(n.map(Q=>Q.grossAfterProductDiscountCents),O);v=n.map((Q,Ke)=>wc(Q,v[Ke],k[Ke]||0))}const B=n.reduce((k,Q)=>k+Q.grossBeforeDiscountCents,0),$=v.reduce((k,Q)=>k+Mt(Q.total),0),b=v.reduce((k,Q)=>k+Mt(Q.grossProductDiscountTotal),0),Y=v.reduce((k,Q)=>k+Mt(Q.grossManualDiscountTotal),0),ce=v.reduce((k,Q)=>k+Mt(Q.receiptDiscountNet),0);return{lines:v,itemCount:t.reduce((k,Q)=>k+Math.max(0,Number(Q.quantity)||0),0),grossSubtotal:le(B),subtotal:le(v.reduce((k,Q)=>k+Mt(Q.netTotal),0)),discountTotal:le(B-$),grossDiscountTotal:le(B-$),productDiscountGrossTotal:le(b),manualDiscountGrossTotal:le(Y),manualDiscountNetTotal:le(ce),taxTotal:le(v.reduce((k,Q)=>k+Mt(Q.taxTotal),0)),total:le($)}}function $n(t,r={}){return Cc(t,r)}function Pc({companyId:t,onCreated:r}){const[n,a]=d.useState(!1),l=Fa(),[o,m]=d.useState({name:"",price:"",purchase_price:"0",tax_rate:"18",vat_norm:"E",barcode:"",sku:"",atk_category_code:"",measurement_unit_code:"",item_type:"product",track_stock:!0,is_active:!0}),u=eo({mutationFn:async s=>{if(!t)throw new Error("Kompania nuk u gjet");if(!s.name.trim())throw new Error("Emri është i detyrueshëm");return Xo({category:s.atk_category_code,unit:s.measurement_unit_code}),await Zo(t,{name:s.name.trim(),price:s.price,purchase_price:s.purchase_price,tax_rate:s.tax_rate,vat_norm:s.vat_norm,barcode:s.barcode.trim()||null,sku:s.sku.trim()||null,atk_category_code:s.atk_category_code,measurement_unit_code:s.measurement_unit_code,item_type:s.item_type,track_stock:s.item_type==="service"?!1:s.track_stock,is_active:s.is_active})},onSuccess:s=>{l.invalidateQueries({queryKey:["products"]}),f.success(s.offline_pending?"Produkti u ruajt offline dhe pret sinkronizim.":"Produkti u shtua me sukses"),m({name:"",price:"",purchase_price:"0",tax_rate:"18",vat_norm:"E",barcode:"",sku:"",atk_category_code:"",measurement_unit_code:"",item_type:"product",track_stock:!0,is_active:!0}),a(!1),r&&r(s.product)},onError:s=>{f.error(s.message)}});return e.jsxs(Zl,{open:n,onOpenChange:a,children:[e.jsx(Yl,{asChild:!0,children:e.jsxs(rt,{variant:"outline",className:"rounded-3xl border-border/60 h-12 px-6",children:[e.jsx(ro,{className:"mr-2 h-4 w-4"}),"Produkt i ri"]})}),e.jsxs(Jl,{className:"sm:max-w-[425px] rounded-[32px]",children:[e.jsx(ec,{children:e.jsx(tc,{children:"Shto Produkt të Shpejtë"})}),e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-name",children:"Emri i produktit *"}),e.jsx(nt,{id:"q-name",value:o.name,onChange:s=>m({...o,name:s.target.value}),placeholder:"p.sh. Kafe Ekspreso"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-sku",children:"SKU / kodi"}),e.jsx(nt,{id:"q-sku",value:o.sku,onChange:s=>m({...o,sku:s.target.value})})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-type",children:"Tipi"}),e.jsxs($t,{value:o.item_type,onValueChange:s=>m({...o,item_type:s,track_stock:s==="service"?!1:o.track_stock}),children:[e.jsx(Vt,{id:"q-type",children:e.jsx(Ht,{})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"product",children:"Produkt / artikull"}),e.jsx(Oe,{value:"service",children:"Shërbim"})]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-price",children:"Çmimi (€)"}),e.jsx(nt,{id:"q-price",type:"number",step:"0.0001",value:o.price,onChange:s=>m({...o,price:s.target.value}),placeholder:"0.00"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-tax",children:"TVSH (%)"}),e.jsxs($t,{value:o.vat_norm,onValueChange:s=>m({...o,vat_norm:s,tax_rate:s==="D"?"8":s==="E"?"18":"0"}),children:[e.jsx(Vt,{id:"q-tax",children:e.jsx(Ht,{})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"A",children:"A — Përjashtuar (0%)"}),e.jsx(Oe,{value:"C",children:"C — 0%"}),e.jsx(Oe,{value:"D",children:"D — 8%"}),e.jsx(Oe,{value:"E",children:"E — 18%"})]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-purchase",children:"Kostoja e blerjes (€)"}),e.jsx(nt,{id:"q-purchase",type:"number",step:"0.0001",min:"0",value:o.purchase_price,onChange:s=>m({...o,purchase_price:s.target.value})})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{children:"Kategoria ATK"}),e.jsxs($t,{value:o.atk_category_code,onValueChange:s=>m({...o,atk_category_code:s}),children:[e.jsx(Vt,{children:e.jsx(Ht,{})}),e.jsx(Wt,{children:Yo.map(([s,j,y])=>e.jsxs(Oe,{value:s,children:[s," — ",j]},`${s}-${y}`))})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{children:"Njësia ATK"}),e.jsxs($t,{value:o.measurement_unit_code,onValueChange:s=>m({...o,measurement_unit_code:s}),children:[e.jsx(Vt,{children:e.jsx(Ht,{})}),e.jsx(Wt,{children:Jo.map(([s,j])=>e.jsxs(Oe,{value:s,children:[s," — ",j]},s))})]})]}),e.jsxs("div",{className:"flex flex-col justify-end gap-2 pb-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(js,{id:"q-track",checked:o.track_stock,disabled:o.item_type==="service",onCheckedChange:s=>m({...o,track_stock:s})}),e.jsx(ct,{htmlFor:"q-track",className:"text-sm font-normal",children:"Gjurmim stoku"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(js,{id:"q-active",checked:o.is_active,onCheckedChange:s=>m({...o,is_active:s})}),e.jsx(ct,{htmlFor:"q-active",className:"text-sm font-normal",children:"Aktiv"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(ct,{htmlFor:"q-barco
2de",children:"Barcode (opsionale)"}),e.jsx(nt,{id:"q-barcode",value:o.barcode,onChange:s=>m({...o,barcode:s.target.value}),placeholder:"Skano ose shëno barcodin"})]})]}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx(rt,{variant:"outline",onClick:()=>a(!1),className:"rounded-2xl",children:"Anulo"}),e.jsx(rt,{onClick:()=>u.mutate(o),disabled:u.isPending,className:"rounded-2xl",children:u.isPending?e.jsx(qt,{className:"h-4 w-4 animate-spin"}):"Ruaj Produktin"})]})]})]})}const Tc={Produkte:"/dashboard/products",Menu:"/dashboard/products",Shërbime:"/dashboard/products",Tarifa:"/dashboard/products",Receta:"/dashboard/products?workspace=pharmacy-prescriptions",Klientë:"/dashboard/clients",Pacientë:"/dashboard/clients?workspace=patients",Tavolina:"/dashboard/pos?view=tables",Raporte:"/dashboard/reports",Inventar:"/dashboard/inventory",Stok:"/dashboard/inventory/stock-movements",Pompa:"/dashboard/fuel-pumps",Oferta:"/dashboard/products?workspace=offers",Porosi:"/dashboard/invoices?workspace=orders","Porosi Online":"/dashboard/invoices?workspace=online-orders",Pagesa:"/dashboard/payments",Punonjës:"/dashboard/team-units",Vozitës:"/dashboard/team-units?workspace=drivers",Orari:"/dashboard/recurring-invoices?workspace=schedule",Vizita:"/dashboard/recurring-invoices?workspace=appointments",Takime:"/dashboard/recurring-invoices?workspace=appointments",Dhoma:"/dashboard/hotel?tab=rooms",Rezervime:"/dashboard/hotel?tab=reservations",Cilësime:"/dashboard/settings"},Ic=new Set(["Shitje","Udhëtime"]);function Dc(t,r){if(Ic.has(r))return{kind:"sale"};if(r==="Klientë")return{kind:"client"};const n=Tc[r];return n?{kind:"route",href:n}:{kind:"route",href:`/dashboard/pos?category=${t}`}}const Ac={Barnat:["barna","bar","tablet","sirup","ilaç","medikament"],Vitamina:["vitamin","suplement"],Kujdesi:["kujdes","krem","dermo","higjien"],"Bebë & Nënë":["bebe","bebë","nënë","pelena"],Ushqime:["ushqim","bukë","mish","djath","qumësht"],Pije:["pije","ujë","lëng","cola","birrë","verë"],Shtëpi:["shtëpi","pastrim"],Higjienë:["higjien","sapun","shampo"],"Të ngira":["ngrir","akullore"],Kafe:["kafe","espresso","cappuccino","makjato"],Ëmbëlsira:["ëmbëls","tort","kek"],"Pjesë Këmbimi":["pjesë","pjes ","fren","gomë"],Vajra:["vaj"],Filtra:["filter","filtër"],Bateri:["bateri","akumulator"],Flokë:["flok","prerje"],Makeup:["makeup","grim"],Manikyr:["manikyr"],Pedikyr:["pedikyr"],Çimento:["çimento","cimento"],Hekur:["hekur","armatur"],Gips:["gips"],Blloqe:["bllok","tullë"],Vegla:["vegël","vegla","mjet"],Ambalazh:["ambalazh","paketim"],Minibar:["minibar"],"Room Service":["room service","dhomë"],Lavanderi:["lavanderi","larje"],Dhoma:["dhomë","akomodim","natë"],Konsultime:["konsult","vizitë","vizite"],Analiza:["analiz","laborator"],Procedura:["procedur","ndërhyrje","nderhyrje"],Terapie:["terapi","fizioterapi"],Benzinë:["benzin"],Naftë:["naft"],Gaz:["gaz"],"Në qytet":["qytet","urban"],"Ndër-qytet":["ndër","interurban"],Aeroport:["aeroport"],Elektronikë:["elektronik","telefon","kompjuter"],Veshje:["veshje","këmish","pantallon"],Bukuri:["bukuri","kozmetik"]};function Qa(t,r,n){if(t==="Të gjitha")return!0;const a=`${r} ${n}`.toLocaleLowerCase("sq-AL");return(Ac[t]||[t.toLocaleLowerCase("sq-AL")]).some(o=>a.includes(o.toLocaleLowerCase("sq-AL")))}function Mi(t,r,n){return t.filter(a=>a!=="Të gjitha"&&a!=="Të tjera").every(a=>!Qa(a,r,n))}const Ec=921420544263;function Rc(t){const r=String(t||"").trim().toLowerCase();return["prod","production","live"].includes(r)?"PROD":"TEST"}function Oc(){return{A:{rate:0,net:0,vat:0,gross:0},C:{rate:0,net:0,vat:0,gross:0},D:{rate:8,net:0,vat:0,gross:0},E:{rate:18,net:0,vat:0,gross:0}}}function Ea(t){const r=t.cart.map(w=>({...w,price:Number(He(w.fiscalPrice??String(w.price),4)),quantity:Number(He(w.quantityExact??String(w.quantity),4)),discountPercent:Number(He(w.discountPercentExact??String(w.discountPercent||0),4)),productDiscountAmount:w.productDiscountAmountExact!=null?Number(He(w.productDiscountAmountExact,4)):w.productDiscountAmount})),a=$n(r,{subtotalDiscountPercent:Number(t.manualDiscountAmount||0)>.005?0:t.manualDiscountPercent||0,subtotalDiscountAmount:t.manualDiscountAmount!=null&&t.manualDiscountAmount>.005?t.manualDiscountAmount:void 0}),l=[];let o=t.cart.map((w,J)=>{const je=w.vatNorm,Ge=He(w.fiscalPrice??String(w.price),4),Se=He(w.quantityExact??String(w.quantity),4),Tt=He(w.discountPercentExact??String(w.discountPercent||0),4),et=w.productDiscountAmount!=null||w.productDiscountAmountExact!=null?He(w.productDiscountAmountExact??String(w.productDiscountAmount??0),4):"0.0000",de=w.productDiscountAmount!=null||w.productDiscountAmountExact!=null,ae=de?ms(Ge,el(et,Se,12)):Ge,ze=ps(ae,"0")<0?"0.0000":He(ae,4),Z=dn(ze,je,de?"0":Tt),Re=dn(Ge,je),E=He(tl(ps(Re,Z)>0?ms(Re,Z):"0",Se),4),at=a.lines[J];l[J]=E;const gt=rl({name:w.name,atk_category_code:w.productCategory,measurement_unit_code:w.measurementUnit,vat_norm:w.vatNorm,tax_rate:w.taxRate},{name:w.name,quantity:Se,unitPrice:Z,totalEuros:at.grossAfterProductDiscount,taxRate:w.taxRate,vatNorm:w.vatNorm,measurementUnit:w.measurementUnit,productCategory:w.productCategory});return{id:w.id||`offline-item-${J+1}`,productId:w.productId||void 0,productName:w.name,productSku:w.sku||w.barcode||void 0,quantity:gt.quantity,price:gt.price/1e4,discountedPrice:gt.price/1e4,priceBeforeDiscount:Number(Re),discount:Number(E),discountPercent:Number(w.discountPercent)||0,vatRate:w.taxRate,vatNorm:gt.taxR
2ate,measurementUnit:gt.unit,productCategory:gt.type,total:at.grossAfterProductDiscount,fiscalCanonical:{price:Z,sourcePrice:Ge,quantity:Se,discount:E,totalEuros:He(String(at.grossAfterProductDiscount),2)}}});const m=a.lines.map(w=>en(w.netAfterProductDiscount)),u=m.reduce((w,J)=>w+J,0),s=Math.min(u,en(a.manualDiscountNetTotal));if(Fi(m,s).some((w,J)=>w!==en(a.lines[J].receiptDiscountNet)))throw new Error("Zbritja neto e kuponit offline nuk përputhet me alokimin kanonik të POS-it.");const y=a.lines.map(w=>en(w.total)),v=Oc();let P=0;y.forEach((w,J)=>{const je=a.lines[J],Ge=en(je.taxTotal),Se=en(je.netTotal),Tt=t.cart[J].vatNorm;v[Tt].net+=Se/100,v[Tt].vat+=Ge/100,v[Tt].gross+=w/100,P+=Ge}),o=o.map((w,J)=>({...w,total:y[J]/100,fiscalCanonical:{...w.fiscalCanonical,totalEuros:He(String(y[J]/100),2),discount:l[J]||"0.0000"}}));const N=y.reduce((w,J)=>w+J,0),O={subtotal:(N-P)/100,discountTotal:a.discountTotal,manualDiscountGrossTotal:a.manualDiscountGrossTotal,total:N/100,taxTotal:P/100};if(!t.createdAt||!Number.isFinite(Date.parse(t.createdAt)))throw new Error("Kuponi fiskal kërkon timestamp të besuar nga serveri.");const B=t.createdAt,$=Date.parse(B),b=String(t.invoice?.invoice_number||$),Y=String(t.invoice?.id||`offline-${$}`),ce=s>0,k=t.fiscalContext||{},Q=nl(),Ke=String(k.sefId||t.company?.sef_fiscalization_no||"").trim(),We=Number(k.branchId||t.company?.sef_branch_id||0),Fe=Number(k.posId||t.company?.sef_default_pos_id||0);if(!Ke||!Number.isSafeInteger(We)||We<=0||!Number.isSafeInteger(Fe)||Fe<=0)throw new Error("Kuponi offline u ndal: identiteti real i SEF-it, Branch ID dhe POS ID duhet të jenë të konfiguruara para lëshimit.");return{id:Y,companyId:String(t.invoice?.company_id||t.company?.id||""),invoiceId:Y,businessUnitId:String(k.businessUnitId||t.company?.fiscal_business_unit_id||t.company?.id||"offline-pos"),operatorId:String(k.operatorId||t.company?.fiscal_operator_id||"POS-OFFLINE"),couponNumber:`OFFLINE-${b}`,documentNumber:0,nuikf:Q,verificationNo:Q,sefIdentifier:Ke,couponType:"regular",printCouponType:ce?"total_discount":void 0,status:"offline",atkStatus:"pending",atkEnvironment:Rc(t.company?.fiscal_environment),subtotal:O.subtotal,discountTotal:O.discountTotal,subtotalDiscountTotal:ce?O.manualDiscountGrossTotal:void 0,printDiscountTotal:ce?O.manualDiscountGrossTotal:void 0,vatTotal:O.taxTotal,grandTotal:O.total,paymentMethods:t.paymentMethods&&t.paymentMethods.length>0?t.paymentMethods.map(w=>({method:ks(w.method),amount:Number(w.amount.toFixed(2))})):[{method:ks(t.paymentMethod),amount:O.total}],vatBreakdown:v,offlineMode:!0,offlineReason:"network_unreachable",qrCodeUrl:void 0,createdAt:B,items:o,businessUnitName:t.company?.name||void 0,businessUnitCode:k.businessUnitCode||void 0,businessUnitAddress:t.company?.address||void 0,businessUnitCity:t.company?.city||void 0,businessUnitPhone:t.company?.phone||void 0,operatorName:String(k.operatorName||t.company?.operator_name||t.company?.operatorName||"").trim()||void 0,companyTatimpaguesi:t.company?.nui||t.company?.fiscal_number||void 0,companyTvshNumber:t.company?.tvsh_number||void 0,businessId:Number(k.businessNui||t.company?.sef_nui_numeric||t.company?.nui||t.company?.fiscal_number||0)||void 0,branchId:We,posId:Fe,applicationId:k.applicationId||Number(t.company?.sef_application_id||0)||Ec,location:String(t.company?.city||t.company?.address||"").trim(),freeText:"OFFLINE / PENDING FISKALIZIM",cashTendered:t.cashTendered!=null&&t.cashTendered>0?t.cashTendered:void 0,changeDue:t.changeDue!=null&&t.changeDue>0?t.changeDue:void 0}}function qi(t){const r=String(t??"0").trim();if(!/^-?\d+(?:\.\d+)?$/.test(r))throw new Error(`Invalid local decimal: ${r}`);const n=r.startsWith("-"),a=n?r.slice(1):r,[l,o=""]=a.split(".");return{negative:n,whole:l,fraction:o}}function Cs(t,r){const{negative:n,whole:a,fraction:l}=qi(t);if(l.length>r)throw new Error(`Local decimal exceeds ${r} places`);const o=BigInt(a)*10n**BigInt(r)+BigInt((l+"0".repeat(r)).slice(0,r)||"0");return n?-o:o}function Ps(t){return qi(t).fraction.length}function Fc(t,r){const n=t<0n,a=n?-t:t,l=10n**BigInt(r),o=a/l,m=r>0?String(a%l).padStart(r,"0").replace(/0+$/,""):"";return`${n?"-":""}${o}${m?`.${m}`:""}`}function Ts(t,r){const n=Math.max(4,Ps(t),Ps(r));return Fc(Cs(t,n)-Cs(r,n),n)}function Mc(t){const{workspace:r,invoice:n,items:a,payments:l=[]}=t;if((r.invoices||[]).some($=>
2String($.id||"")===n.id))return r;const o=new Map;for(const $ of a){const b=String($.inventory_product_id||"").trim();if(!b)continue;const Y=o.get(b)||"0";o.set(b,Ts(Y,`-${String($.quantity??0)}`))}const m=t.defaultWarehouseId||r.defaultWarehouseId||null,u=new Map;(r.inventoryStock||[]).forEach(($,b)=>{const Y=String($.product_id||"");!Y||u.has(Y)||m&&String($.warehouse_id||"")!==m&&b!==(r.inventoryStock||[]).findIndex(ce=>String(ce.product_id||"")===Y&&String(ce.warehouse_id||"")===m)||u.set(Y,b)}),(r.inventoryStock||[]).forEach(($,b)=>{const Y=String($.product_id||"");Y&&!u.has(Y)&&u.set(Y,b)});const s=Array.isArray(r.inventoryStock)?r.inventoryStock.map(($,b)=>{const Y=o.get(String($.product_id));return Y===void 0||u.get(String($.product_id))!==b?$:{...$,current_quantity:Ts($.current_quantity,Y),offline_pending:!0,offline_pending_operation_ids:Array.from(new Set([...Array.isArray($.offline_pending_operation_ids)?$.offline_pending_operation_ids.map(String):[],n.id]))}}):r.inventoryStock,j={id:n.id,invoice_number:n.invoice_number||n.id,grand_total:n.grand_total??0,status:n.status||"paid",created_at:n.created_at||new Date().toISOString(),invoice_date:n.invoice_date||null,client_id:n.client_id||null,offline_pending:!0},y=(r.invoices||[]).filter($=>String($.id||"")!==n.id),v=[j,...y],P=l.map(($,b)=>({id:`${n.id}:payment:${b}`,invoice_id:n.id,amount:$.amount??0,method:$.method||"cash",created_at:n.created_at||new Date().toISOString(),offline_pending:!0})),N=(r.payments||[]).filter($=>!P.some(b=>String($.id||"")===b.id)),O=Number(n.grand_total||0),B=r.todayMetrics||{todayRevenue:0,todayInvoices:0};return{...r,invoices:v,payments:[...P,...N],inventoryStock:s,todayMetrics:{todayRevenue:B.todayRevenue+O,todayInvoices:B.todayInvoices+1}}}const qc=t=>{const r=[...t].sort((n,a)=>n.id.localeCompare(a.id));return JSON.stringify(r.map(n=>({id:n.id,sourceProductId:n.sourceProductId??null,name:n.name,price:String(n.price),taxRate:Number(n.taxRate),quantity:String(n.quantity),barcode:n.barcode??null})))},Kc=(t,r,n)=>{const a=qc(r);return t?.cartSnapshot===a?t:{key:n(),cartSnapshot:a,inFlight:!1}},zc=t=>({...t,inFlight:!0}),Lc=t=>({...t,inFlight:!1});function Uc(t){return Number(t?.status||t?.statusCode||t?.context?.status||0)}function Is(t){return Uc(t)>0||va(t)?!1:Nr(t)}const Ki=()=>{const t=async o=>{const m=String(o.idempotencyKey||"").trim(),u=m||globalThis.crypto?.randomUUID?.()||`email-${Date.now()}`,s=m||`email-delivery:${u}`;try{const j=typeof window<"u"?new URL("favicon.png",new URL("/",window.location.origin)).toString():void 0,y={...o,logoUrl:o.logoUrl??j,idempotencyKey:s},v=async()=>{if(!o.companyId)throw new Error("Kompania mungon për email-outbox.");await Zs({entity:"email_delivery",operation:"create",companyId:o.companyId,entityId:u,localId:u,idempotencyKey:s,payload:{companyId:o.companyId,invoiceId:o.invoiceId||null,deliveryId:u,body:y,queuedAt:new Date().toISOString()}})};let P,N;try{let O;const B=new Promise(($,b)=>{O=window.setTimeout(()=>b(new al),1e4)});try{({data:P,error:N}=await Promise.race([ee.functions.invoke("send-invoice-email",{body:y}),B]))}finally{O!==void 0&&window.clearTimeout(O)}}catch(O){if(va(O))return f.error("Sesioni ka skaduar. Hyni përsëri dhe riprovoni dërgimin e email-it."),!1;if(Is(O))return await v(),f.success("Email-i u përgatit lokalisht dhe është në pritje për dërgim."),!0;throw O}if(N){if(va(N))return f.error("Sesioni ka skaduar. Hyni përsëri dhe riprovoni dërgimin e email-it."),!1;if(Is(N))return await v(),f.success("Email-i u përgatit lokalisht dhe është në pritje për dërgim."),!0;console.error("Error sending email:",N);const O=await sl(N);return f.error("Gabim në dërgimin e email-it: "+O),!1}return P?.success?(f.success(P.message||"Email-i u dërgua me sukses!"),!0):(f.error(P?.error||"Gabim në dërgimin e email-it"),!1)}catch(j){return console.error("Error sending email:",j),f.error("Gabim: "+j.message),!1}};return{sendEmail:t,sendInvoiceEmail:async(o,m,u,s)=>t({type:"invoice",recipientEmail:m.email,recipientName:m.name,companyName:u.name,companyId:u.id,companyEmail:u.email||void 0,invoiceNumber:o.invoice_number,invoiceDate:o.invoice_date,dueDate:o.due_date||void 0,amount:o.grand_total,pdfBase64:s}),sendPaymentReminder:async(o,m,u,s)=>t({type:"reminder",recipientEmail:m.email,recipientName:m.name,companyName:u.name,companyId:u.id,companyEmail:u.email||void 0,invoiceNumber:o.invoice_number,invoiceDate:o.invoice_date,dueDate:o.due_date,amount:o.grand_total,daysUntilDue:s}),sendOverdueNotice:async(o,m,u,s)=>t({type:"overdue",recipientEmail:m.email,recipientName:m.name,companyName:u.name,companyId:u.id,companyEmail:u.email||void 0,invoiceNumber:o.invoice_number,invoiceDate:o.invoice_date,dueDate:o.due_date,amount:o.grand_total,daysOverdue:s}),sendPaymentConfirmation:async(o,m,u,s,j)=>t({type:"payment_received",recipientEmail:m.email,recipientName:m.name,companyName:u.name,companyId:u.id,companyEmail:u.email||void 0,invoiceNumber:o.invoice_number,invoiceDate:o.invoice_date,amount:o.grand_total,paymentAmount:s,paymentDate:j})}},Bc=t=>{const r=t.printerWidth===58?58:80,n=r===58?4:5,a=r-n*2,l=String(t.notes||"").trim(),o=t.items.reduce((v,P)=>v+Math.max(1,Math.ceil(P.name.length/(r===58?26:38))),0),m=Math.max(145,92+o*7+(l?22:0)),u=new Yi({unit:"mm",format:[r,m]});u.setFillColor(255,255,255),u.rect(0,0,r,m,"F"),u.setTextColor(0,0,0);let s=8;const j=(v,P,N=!1)=>{u.setFont("helvetica",N?"bold":"normal"),u.setFontSize(P),u.text(v,r/2,s,{align:"center"}),s+=P*.62+2},y=()=>{u.setLineWidth(.25),u.setLineDashPattern([.8,1.1],0),u.line(n,s,r-n,s),u.setLineDashPattern([],0),s+=4};j(t.stationLabel.toUpperCase(),r===58?12:14,!0),j("KUPON PUNE · JO FISKAL",r===58?7:8,!0),s+=1,y(),u.setFont("helvetica","normal"),u.setFontSize(r===58?7:8),u.text(`Biznesi: ${t.companyName||"—"}`,n,s),s+=5,u.setFont("helvetica","bold"),u.text(`Tavolina: ${t.tableId}`,n,s),u.text(`Porosia: ${t.orderNumber}`,r-n,s,{align:"right"}),s+=5,u.setFont("helvetica","normal"),u.text(`Ora: ${(t.createdAt||new Date).toLocaleStr
2ing("sq-XK",{dateStyle:"short",timeStyle:"short"})}`,n,s),s+=6,y(),u.setFontSize(r===58?9:10);for(const v of t.items){const P=u.splitTextToSize(v.name,a-14);u.setFont("helvetica","bold"),u.text(`${v.quantity} ×`,n,s),u.setFont("helvetica","normal"),u.text(P,n+13,s),s+=Math.max(1,P.length)*5.2+2}return l&&(s+=2,y(),u.setFont("helvetica","bold"),u.setFontSize(r===58?8:9),u.text("SHËNIM:",n,s),s+=5,u.setFont("helvetica","normal"),u.text(u.splitTextToSize(l,a),n,s)),u.output("blob")},zi=t=>{try{return JSON.parse(JSON.stringify(t))}catch{return[]}};async function $c(t){const[r,n]=await Promise.all([br(t,"restaurant_tables",{limit:1e3}),br(t,"restaurant_open_orders",{limit:1e3})]);return{tables:r.filter(a=>a.is_active!==!1).sort((a,l)=>Number(a.sort_order||0)-Number(l.sort_order||0)||String(a.code).localeCompare(String(l.code))),openOrders:n.filter(a=>["open","held"].includes(String(a.status)))}}async function Vn(t,r,n){const a=new Date().toISOString();for(const l of n)l?.id&&await il({companyId:t,entityType:r,entityId:String(l.id),payload:l,createdAt:String(l.created_at||a),updatedAt:String(l.updated_at||l.created_at||a),cloudUpdatedAt:String(l.updated_at||l.created_at||a),syncStatus:"synced"}).catch(()=>{})}async function Vc(t){if(xr()){const l=await $c(t);if(l.tables.length||l.openOrders.length||At())return l}const[r,n]=await Promise.all([ee.from("restaurant_tables").select("*").eq("company_id",t).eq("is_active",!0).order("sort_order",{ascending:!0}).order("code",{ascending:!0}),ee.from("restaurant_open_orders").select("*").eq("company_id",t).in("status",["open","held"])]);if(r.error)throw r.error;if(n.error)throw n.error;const a={tables:r.data||[],openOrders:n.data||[]};return xr()&&await Promise.all([Vn(t,"restaurant_tables",a.tables),Vn(t,"restaurant_open_orders",a.openOrders)]),a}async function Xa(t,r){const a=(await br(t,"restaurant_tables",{limit:1e3})).find(m=>m.code===r);if(a||At())return a||null;const{data:l,error:o}=await ee.from("restaurant_tables").select("*").eq("company_id",t).eq("code",r).maybeSingle();if(o)throw o;return l?.id&&xr()&&await Vn(t,"restaurant_tables",[l]),l||null}async function Za(t,r){const a=(await br(t,"restaurant_open_orders",{limit:1e3})).find(m=>m.table_code===r&&["open","held"].includes(String(m.status)));if(a||At())return a||null;const{data:l,error:o}=await ee.from("restaurant_open_orders").select("*").eq("company_id",t).eq("table_code",r).maybeSingle();if(o)throw o;return l?.id&&xr()&&await Vn(t,"restaurant_open_orders",[l]),l||null}async function un(t){const r={company_id:t.company_id,code:t.code,seats:t.seats,zone:t.zone,status:t.status,sort_order:t.sort_order,is_active:t.is_active??!0};if(xr()){const a=await Xa(t.company_id,t.code);await Vr({companyId:t.company_id,entity:"restaurant_table",operation:a?"update":"create",entityId:a?.id||crypto.randomUUID(),data:r,replicaData:{...a||{},...r}});return}const{error:n}=await ee.from("restaurant_tables").upsert(r,{onConflict:"company_id,code"});if(n)throw n}const Hc=t=>{const r=t,n=String(r?.message||"").toLowerCase();return r?.code==="PGRST202"||n.includes("could not find the function")};async function Wc(t){const r=t.oldCode.trim(),n=t.newCode.trim();if(!r||!n||r===n){await un({company_id:t.companyId,code:n||r,seats:t.seats,zone:t.zone,status:t.status,sort_order:t.sortOrder,is_active:!0});return}if(xr()){const[s,j]=await Promise.all([Xa(t.companyId,r),Za(t.companyId,r)]);if(!s)throw new Error("Tavolina nuk u gjet në kopjen lokale.");const y={...s,code:n,seats:t.seats,zone:t.zone,status:t.status,sort_order:t.sortOrder,updated_at:new Date().toISOString()};await Vr({companyId:t.companyId,entity:"restaurant_table",operation:"update",entityId:s.id,writer:"restaurant_table_rename",data:{old_code:r,new_code:n,seats:t.seats,zone:t.zone,status:t.status,sort_order:t.sortOrder},replicaData:y,extraReplicaRecords:j?[{entityType:"restaurant_open_orders",entityId:j.id,payload:{...j,table_code:n,version:Number(j.version||0)+1,updated_at:new Date().toISOString()}}]:[]});return}const{error:a}=await ee.rpc("rename_restaurant_table",{p_company_id:t.companyId,p_old_code:r,p_new_code:n,p_seats:t.seats,p_zone:t.zone,p_status:t.status,p_
2sort_order:t.sortOrder});if(!a)return;if(!Hc(a))throw a;const{data:l,error:o}=await ee.from("restaurant_tables").select("id").eq("company_id",t.companyId).eq("code",n).maybeSingle();if(o)throw o;if(l)throw new Error("Kjo tavolinë ekziston tashmë.");const{data:m,error:u}=await ee.from("restaurant_open_orders").select("*").eq("company_id",t.companyId).eq("table_code",r).maybeSingle();if(u)throw u;await un({company_id:t.companyId,code:n,seats:t.seats,zone:t.zone,status:t.status,sort_order:t.sortOrder,is_active:!0});try{if(m){const{error:s}=await ee.from("restaurant_open_orders").update({table_code:n,version:Date.now()}).eq("company_id",t.companyId).eq("table_code",r);if(s)throw s}await Ra(t.companyId,r)}catch(s){try{await Ra(t.companyId,n)}catch{}throw s}}async function Ra(t,r){if(xr()){const a=await Xa(t,r);if(!a)return;await Vr({companyId:t,entity:"restaurant_table",operation:"update",entityId:a.id,data:{is_active:!1,status:"free"},replicaData:{...a,is_active:!1,status:"free",updated_at:new Date().toISOString()}});return}const{error:n}=await ee.from("restaurant_tables").update({is_active:!1,status:"free"}).eq("company_id",t).eq("code",r);if(n)throw n}async function wn(t){const r={company_id:t.companyId,table_code:t.tableCode,items:zi(t.items),notes:t.notes||null,status:t.status||"open",ver
2sion:Date.now()};if(xr()){const a=await Za(t.companyId,t.tableCode),l=a?.id||crypto.randomUUID();await Vr({companyId:t.companyId,entity:"restaurant_open_order",operation:a?"update":"create",entityId:l,data:r,replicaData:{...a||{},...r,id:l}});return}const{error:n}=await ee.from("restaurant_open_orders").upsert(r,{onConflict:"company_id,table_code"});if(n)throw n}async function Ds(t,r){if(xr()){const a=await Za(t,r);if(!a)return;await Vr({companyId:t,entity:"restaurant_open_order",operation:"delete",entityId:a.id,data:a,replicaData:a});return}const{error:n}=await ee.from("restaurant_open_orders").delete().eq("company_id",t).eq("table_code",r);if(n)throw n}async function Gc(t){const r=crypto.randomUUID(),n={id:r,company_id:t.companyId,table_code:t.tableCode,station:t.station,order_number:t.orderNumber,items:zi(t.items),notes:t.notes||null,printer_name:t.printerName||null,open_order_id:t.openOrderId||null,status:"queued"};if(xr())return await Vr({companyId:t.companyId,entity:"restaurant_work_ticket",operation:"create",entityId:r,data:n,replicaData:n}),r;const{data:a,error:l}=await ee.from("restaurant_work_tickets").insert(n).select("id").single();if(l)throw l;return a?.id||null}async function As(t,r,n,a){const l={status:n,printed_at:n==="printed"?new Date().toISOString():null,error_message:a||null};if(xr()){const u=(await br(r,"restaurant_work_tickets",{limit:5e3})).find(s=>s.id===t)||{id:t,company_id:r};await Vr({companyId:r,entity:"restaurant_work_ticket",operation:"update",entityId:t,data:l,replicaData:{...u,...l}});return}const{error:o}=await ee.from("restaurant_work_tickets").update(l).eq("id",t).eq("company_id",r);if(o)throw o}const Qc=250,Xc=3e3;function Dn(t){return t==null?"":Array.from(String(t)).filter(r=>{const n=r.charCodeAt(0);return n>31&&n!==127}).join("").trim()}function Zc(t){return t==="Enter"||t==="NumpadEnter"||t==="Tab"}function Yc(t){if(Dn(t.value).length<(t.minLength??5)||t.startedAt<=0||t.lastKeyAt<=0)return!1;const n=t.now-t.startedAt,a=t.now-t.lastKeyAt;return n>=0&&n<=(t.maxDurationMs??Xc)&&a>=0&&a<=(t.maxKeyGapMs??Qc)}const Jc=new Set(["ATK_ACCEPTED","ATK_ALREADY_FISCALIZED","ATK_ACCEPTED_PERSISTENCE_PENDING"]);function ed(t){return!!(t?.code&&Jc.has(t.code))}function Es({documentType:t,offlinePending:r,transmission:n}){return r?"offline":n?n.cached||ed(n)||n.success&&!n.queued?"accepted":n.requiresManualVerification?"reconciliation_required":n.success||n.queued?"queued":"rejected":"queued"}function td({outcome:t,transmission:r}){return t==="accepted"||t==="offline"||t==="queued"&&!!r?.printable}function Rs(t,r,n){if(t?.vat_regime_review_required)return null;const a=!!String(r||"").trim();return!t&&!a?null:(t?Ys(t,n):a)?{vatRate:18,vatNorm:"E",atkSupplyType:"standard_18"}:{vatRate:0,vatNorm:"A",atkSupplyType:"exempt_with_credit"}}function Oa(t){if(Array.isArray(t))return t.flatMap(Oa);if(!t||typeof t!="object")return[];const r=t;
2return typeof r.table=="string"&&typeof r.operation=="string"&&Array.isArray(r.chain)&&Object.prototype.hasOwnProperty.call(r,"payload")?Oa(r.payload):[r]}function ln(t){return t.flatMap(Oa)}function rd(t){return t.filter(r=>["running","paused"].includes(String(r.status||"").toLowerCase())).sort((r,n)=>String(n.updated_at||n.departure_time||"").localeCompare(String(r.updated_at||r.departure_time||"")))[0]||null}function Li(t){const r=String(t||"").trim();if(!r)throw new Error("Taxi trip ID is required for an idempotent invoice number.");return`TAXI-${r}`}function nd(t){return`OFF-${Li(t)}`}function ad(t){return t.filter(r=>r.delivery_evidence?.transport?.pricingMode==="taximeter").sort((r,n)=>String(n.created_at||"").localeCompare(String(r.created_at||""))).slice(0,40)}function sd(t){const r=ln(t.units),n=ln(t.devices),a=ln(t.trips),l=ln(t.operators),o=ln(t.history);return{units:r.filter(m=>m.is_active!==!1),devices:n.filter(m=>m.is_active!==!1),operators:l.filter(m=>m.is_active!==!1),tripRow:rd(a),history:ad(o)}}function id(t){if(!t||typeof t!="object")return null;const r=t,n=String(r.deviceId||r.device_id||r.serialNumber||"").trim();if(!n)return null;const a=String(r.status||"idle"),l=["idle","running","paused","completed","error"].includes(a)?a:"error",o=r.readingKm??r.reading_km??r.currentReading,m=r.fareTotal??r.fare_total??r.meterTotal;return{deviceId:n,sequence:Number(r.sequence??r.telemetrySequence??0),status:l,readingKm:o==null?void 0:Number(o),fareTotal:m==null?void 0:Number(m),serviceType:r.serviceType==null?void 0:String(r.serviceType),timestamp:String(r.timestamp||new Date().toISOString()),raw:r}}const Os="https://www.atk-ks.org/portfolio/kompanite-e-licencuara/",Fs="https://www.atk-ks.org/njoftim-per-tatimpagues-pajisu-me-sistem-fiskal-te-vecante-per-taxi/",ia=[{catalogKey:"xk.atk.taxi.fmp-350",deviceKind:"taximeter",officialModel:"FMP-350 Taxi",providerName:"Enternet Sh.p.k.",fiscalDeviceModel:"FMP-350",taximeterModel:void 0,confirmedTransports:["usb_serial","bluetooth"],declaredTransportLabels:["Mini USB (RS232-USB)","Bluetooth","GPRS"],protocolKey:"xk.atk.taxi.fmp-350",adapterKey:"xk-atk-taxi-fmp350",adapterStatus:"requires_vendor_adapter",evidenceStatus:"confirmed_public",sourceUrls:[Os,Fs,"https://www.atk-ks.org/wp-content/uploads/2017/05/FMP350-Taxi-Doracak-Perdorimi-i-Permbledhur.pdf"],sourceCheckedOn:"2026-08-24",notes:["ATK e liston si Sistem Fiskal për TAXI.","Manuali publik përmend Mini USB (RS232-USB), Bluetooth dhe GPRS për komunikimin tatimor.","Profili Bluetooth dhe protokolli komandues i taksimetrit nuk publikohen në këtë manual; kërkohet adapter i furnizuesit."]},{catalogKey:"xk.atk.taxi.fp-24-elitaxt100m3",deviceKind:"taximeter",officialModel:"FP-24",providerName:"SERVICE GLOBAL",fiscalDeviceModel:"TREMOL FP24",taximeterModel:"ELITAX TA-100/M3",confirmedTransports:["usb","usb_serial","rs232"],declaredTransportLabels:["Micro USB","RS232","USB Virtual COM","vehicle speed impulse"],protocolKey:"xk.atk.taxi.fp-24-elitaxt100m3",adapterKey:"xk-atk-taxi-fp24-elitaxt100m3",adapterStatus:"requires_vendor_adapter",evidenceStatus:"confirmed_public",sourceUrls:[Os,Fs,"https://www.atk-ks.org/wp-content/uploads/2017/05/Manuali-i-Perdorimit-TAXI-SHQ.pdf"],sourceCheckedOn:"2026-08-24",notes:["ATK e liston si Sistem Fiskal për TAXI me modelin FP-24.","Manuali identifikon kombinimin ELITAX TA-100/M3 + TREMOL FP24.","Manuali kërkon lidhjen e taksimetrit me PEF-in dhe përmend impulsin e shpejtësisë së automjetit."]}],Ms=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,oa=t=>`${Number(t||0).toFixed(2)} €`,od=t=>t?new Date(t).toLocaleTimeString("sq-XK",{hour:"2-digit",minute:"2-digit"}):"--:--",ld=t=>{const r=Math.floor(Math.max(0,t)/60),n=Math.max(0,t)%60;return`${String(Math.floor(r/60)).padStart(2,"0")}:${String(r%60).padStart(2,"0")}:${String(n).padStart(2,"0")}`};function cd(t){const r=t.last_telemetry||{},n=["connected","syncing","offline","error"].includes(t.connection_status||"")?t.connection_status:"offline",a=id({...r,deviceId:r.deviceId||t.serial_number});return{id:t.id,model:t.model,serial_number:t.serial_number,protocol:t.protocol||"generic-realtime",connection_type:t.connection_type||"gateway",firmware_version:t.firmware_version||null,connection_status:n,last_seen_at:t.last_seen_at||null,last_telemetry:a?{...a}:t.last_telemetry||null,business_unit_id:t.business_unit_id}}function dd({company:t,companyId:r,canOperatePos:n}){const{locale:a}=Js(),l=Fa(),o=ei(),{createInvoice:m}=di(),{recordPayment:u}=ui(),{sendEmail:s}=Ki(),{data:j,isLoading:y,error:v}=Kr({queryKey:["pos-vat-profile",r],enabled:!!r,staleTime:6e4,queryFn:async()=>{const h=async()=>{const L=await br(r,"company_tax_profiles",{limit:5});return dl(L[0]||null)};if(typeof window<"u"&&window.electronAPI?.isElectron===!0&&(!o.isOnline||At()))return h();try{return await si(r)}catch(L){if(!Nr(L))throw L;const A=await h();if(A)return A;throw L}}}),P=Rs(j,t?.vat_number||t?.tvsh_number,ja()),[N,O]=d.useState(""),[B,$]=d.useState(""),[b,Y]=d.useState("1T"),[ce,k]=d.use
2State(""),[Q,Ke]=d.useState(""),[We,Fe]=d.useState(""),[w,J]=d.useState(""),[je,Ge]=d.useState(""),[Se,Tt]=d.useState(""),[et,de]=d.useState(""),[ae,ze]=d.useState("gateway"),[Z,Re]=d.useState(!1),[E,at]=d.useState(null),[gt,er]=d.useState(!1),[fr,Qe]=d.useState(!1),[Xe,tr]=d.useState(Date.now()),[rr,gr]=d.useState(null),[F,Et]=d.useState("paper"),[pt,It]=d.useState(""),nr=d.useRef(!1),pe=Ei("taxi"),{data:Ce,isLoading:Pe,refetch:Rt}=Kr({queryKey:["taxi-pos-workspace",r],queryFn:async()=>{const h=typeof window<"u"&&window.electronAPI?.isElectron===!0,z=async()=>{const[L,A,g,G,ie]=await Promise.all([br(r,"fiscal_business_units"),br(r,"taximeter_devices"),br(r,"taximeter_trip_sessions"),br(r,"fiscal_operators"),br(r,"invoices",{limit:200})]);return sd({units:L,devices:A,trips:g,operators:G,history:ie})};if(h&&(At()||typeof navigator<"u"&&!navigator.onLine))return z();try{const[L,A,g,G,ie]=await Promise.all([ee.from("fiscal_business_units").select("id,name,unit_code,address,vehicle_plate_number,is_active,sef_branch_id,sef_pos_id,sef_fiscalization_no").eq("company_id",r).eq("is_active",!0).order("created_at"),ee.from("taximeter_devices").select("*").eq("company_id",r).eq("is_active",!0).order("created_at"),ee.from("taximeter_trip_sessions").select("*").eq("company_id",r).in("status",["running","paused"]).order("updated_at",{ascending:!1}).limit(1),ee.from("fiscal_operators").select("id,name,operator_code").eq("company_id",r).eq("is_active",!0).order("created_at").limit(20),ee.from("invoices").select("id,invoice_number,grand_total,created_at,delivery_evidence").eq("company_id",r).order("created_at",{ascending:!1}).limit(40)]),Me=[L.error,A.error,g.error,G.error,ie.error].find(Boolean);if(Me)throw Me;const Be=L.data||[],st=(A.data||[]).map(cd),ke=g.data?.[0],it=(ie.data||[]).filter(ue=>ue.delivery_evidence?.transport?.pricingMode==="taximeter");return{units:Be,devices:st,operators:G.data||[],tripRow:ke,history:it}}catch(L){if(h&&Nr(L))return z();throw L}},enabled:!!r,staleTime:15e3,retry:0}),{data:vt}=Kr({queryKey:["fiscal-readiness",r,"taxi"],queryFn:()=>hi(r),enabled:!!r&&o.isOnline&&pe.sharedFiscalEngine.length>0,staleTime:3e4,retry:0}),jt=d.useMemo(()=>Ce?.units||[],[Ce?.units]),_t=d.useMemo(()=>Ce?.devices||[],[Ce?.devices]),Ot=d.useMemo(()=>Ce?.history||[],[Ce?.history]),V=jt.find(h=>h.id===(E?.unitId||N))||jt[0],yt=d.useMemo(()=>_t.filter(h=>h.business_unit_id===V?.id),[_t,V?.id]),he=yt.find(h=>h.id===(E?.deviceId||B))||yt[0],Kt=ia.find(h=>h.officialModel===je),tt=Ot.filter(h=>new Date(h.created_at).toDateString()===new Date().toDateString()),St=tt.reduce((h,z)=>h+Number(z.grand_total||0),0),Gt=tt.reduce((h,z)=>h+Number(z.delivery_evidence?.transport?.taximeter?.kilometers||0),0),ar=vt?pi(vt):null,ht=Ri({networkOnline:o.isOnline,forcedOffline:At(),isSaving:gt,isTransmitting:fr,readinessState:ar}),Le=Number(vt?.offlinePendingCount||0)+Number(vt?.sefPendingCount||0);d.useEffect(()=>{!N&&jt[0]&&O(jt[0].id)},[N,jt]),d.useEffect(()=>{!B&&yt[0]&&$(yt[0].id)},[B,yt]),d.useEffect(()=>{const h=Ce?.tripRow;!h||E||at({id:h.id,deviceId:h.taximeter_device_id,unitId:h.business_unit_id,serviceType:h.service_type||"1T",departureTime:h.departure_time||new Date().toISOString(),startReading:Number(h.start_reading||0),currentReading:Number(h.current_reading??h.start_reading??0),meterTotal:Number(h.meter_total||0),durationSeconds:Number(h.duration_seconds||0),status:h.status==="paused"?"paused":"running"})},[E,Ce?.tripRow]),d.useEffect(()=>{if(!E||E.status!=="running")return;const h=window.setInterval(()=>tr(Date.now()),1e3);return()=>window.clearInterval(h)},[E]),d.useEffect(()=>{if(!r)return;const h=ws(r,"taximeter_devices",()=>void l.invalidateQueries({queryKey:["taxi-pos-workspace",r]})),z=ws(r,"taximeter_trip_sessions",L=>{const A=L.new||L.old;if(L.eventType==="DELETE"||["completed","cancelled"].includes(String(A?.status))){at(null),Rt();return}A?.id&&at({id:A.id,deviceId:A.taximeter_device_id,unitId:A.business_unit_id,serviceType:A.service_type||"1T",departureTime:A.departure_time||new Date().toISOString(),startReading:Number(A.start_reading||0),currentReading:Number(A.current_reading??A.start_reading??0),meterTotal:Number(A.meter_total||0),durationSeconds:Number(A.duration_seconds||0),status:A.status==="paused"?"paused":"running"})});return()=>{h(),z()}},[r,l,Rt]);const se=d.useMemo(()=>
2{if(!E)return 0;const h=E.status==="running"?Math.max(0,Math.floor((Xe-new Date(E.departureTime).getTime())/1e3)):0;return Math.max(E.durationSeconds,h)},[E,Xe]),H=d.useCallback(async h=>{const{data:z,error:L}=await ee.from("taximeter_trip_sessions").upsert(h,{onConflict:"id"}).select("*").single();if(L)throw L;return z},[]),bt=async()=>{if(!n)return f.error("Nuk keni leje për të nisur udhëtime.");if(!V?.vehicle_plate_number)return f.error("Plotëso targën e automjetit te Njësitë & Stafi.");if(!he)return f.error("Regjistro ose lidh një taksimetër për këtë njësi.");const h=Number(Q||he.last_telemetry?.readingKm||0);if(!Number.isFinite(h)||h<0)return f.error("Leximi fillestar nuk është i vlefshëm.");er(!0);try{const z=Ce?.operators?.[0]?.id||null,L=globalThis.crypto?.randomUUID?.();if(!L)throw new Error("Nuk u krijua ID e sigurt për udhëtimin taxi.");const A=await H({id:L,company_id:r,business_unit_id:V.id,taximeter_device_id:he.id,operator_id:z,status:"running",service_type:b,departure_time:new Date().toISOString(),start_reading:h,current_reading:h,meter_total:Number(w||0),duration_seconds:0,telemetry_sequence:Number(he.last_telemetry?.sequence||0),last_telemetry_at:he.last_seen_at,metadata:{driverName:ce.trim()||null,vehiclePlate:V.vehicle_plate_number}});at({id:A.id,deviceId:A.taximeter_device_id,unitId:A.business_unit_id,serviceType:A.service_type,departureTime:A.departure_time,startReading:Number(A.start_reading),currentReading:Number(A.current_reading),meterTotal:Number(A.meter_total),durationSeconds:0,status:"running"}),f.success("Udhëtimi u nis dhe po sinkronizohet realtime.")}catch(z){f.error(z instanceof Error?z.message:"Taksimetri nuk u lidh.")}finally{er(!1)}},Te=async(h,z)=>{if(!E)return;const L=Number(z);if(!(!Number.isFinite(L)||L<0)){at(A=>A&&{...A,currentReading:h==="current_reading"?L:A.currentReading,meterTotal:h==="meter_total"?L:A.meterTotal});try{await ee.from("taximeter_trip_sessions").update({[h]:L,last_telemetry_at:new Date().toISOString()}).eq("id",E.id).eq("company_id",r)}catch{}}},Ct=d.useCallback(async h=>{try{const L=Dr(h.coupon)?h.coupon:await Ia(h.coupon,t),A=Dr(L);if(!A||!String(A).includes("|"))throw new Error("Kuponi taxi nuk ka CitizenCoupon QR të vlefshëm.");const g=_n(t?.fiscal_settings||{}),G=await In(L,{companyName:t?.name||"Kompania",companyNui:t?.nui||void 0,companyFiscalNumber:t?.fiscal_number||void 0,companyTvshNumber:t?.tvsh_number||void 0,companyLogoUrl:t?.logo_url||void 0,format:g,isCopy:!1,language:a});if(h.choice==="without_paper")return rc(G),f.success("Print Preview u hap; kuponi taxi nuk u dërgua te printeri."),!0;const ie=String(h.recipientEmail||"").trim().toLowerCase();if(!Ms.test(ie))throw new Error("Email-i i marrësit nuk është i vlefshëm.");const Me=mi(a,{couponNumber:L.couponNumber,companyName:t?.name||"Kompania",recipientName:"Klient taxi",amount:Number(L.grandTotal||0)});return await s({type:"invoice",recipientEmail:ie,recipientName:"Klient taxi",companyName:t?.name||"Kompania",companyId:r,companyEmail:t?.email||void 0,logoUrl:t?.logo_url||void 0,invoiceNumber:L.couponNumber,invoiceId:h.invoiceId,invoiceDate:L.createdAt,amount:Number(L.grandTotal||0),pdfBase64:await bi(G),idempotencyKey:`taxi-fiscal-coupon-email:${h.invoiceId}:${ie}`,customSubject:`${Me.subjectPrefix} TAXI ${L.couponNumber} - ${t?.name||"Kompania"}`,customMessage:Me.shortMessage,documentKind:"fiscal_coupon",documentLanguage:a,pdfFilename:`Taxi-${Tn(L.couponNumber,a)}`})}catch(z){return f.error(`Dorëzimi elektronik i kuponit taxi dështoi: ${z instanceof Error?z.message:"Gabim i panjohur"}`),!1}},[t,r,a,s]),ye=d.useCallback(async(h,z)=>{const L=await Ln(h,t,{requireAtkProof:!0,waitForCouponMs:12e3,includePrintMetadata:!0});return!L||!ti(L)?(f.warning("Dorëzimi u ndal: kuponi taxi nuk ka ende provë të plotë të pranimit nga ATK ose CitizenCoupon QR."),!1):F==="paper"?sa(L,t,{preparedWindow:z,isCopy:!1,language:a,silent:zr()&&Ar()}):Ct({invoiceId:h,coupon:L,choice:F,recipientEmail:pt})},[t,F,Ct,a,pt]),sr=async()=>{if(!E||!V||nr.current)return;const h=Number(We||E.currentReading),z=Number(w||E.meterTotal),L=h-E.startReading;if(!Number.isFinite(h)||L<0)return f.error("Leximi final duhet të jetë më i madh ose i barabartë me fillimin.");
2if(!Number.isFinite(z)||z<=0)return f.error("Totali nga taksimetri duhet të jetë më i madh se zero.");if(!V.vehicle_plate_number)return f.error("Targa mungon në njësinë e zgjedhur.");if(F==="email"&&!Ms.test(pt.trim()))return f.error("Plotëso një email të vlefshëm për dërgimin e kuponit taxi.");if(y)return f.error("Pritet ngarkimi i profilit të TVSH-së para lëshimit të kuponit.");if(v)return f.error("Profili tatimor nuk u verifikua; kuponi nuk u lëshua.",{description:v instanceof Error?v.message:String(v)});nr.current=!0,er(!0);let A=null;const g=()=>{if(!(!A||A.closed))try{A.close()}catch{}};try{A=F==="paper"&&!(zr()&&Ar())?xi():null;let G=!o.isOnline||At(),ie=!1,Me=!1;G?await ya(r):await Sn(r);const Be=ja(),st=ka();if(st.warning)throw Na(r,st),new Error(`${st.message||"Koha fiskale është e pasigurt."} ${wa(st)}`);const ke=new Date(Be),it=_a(Be),ue=Rs(j,t?.vat_number||t?.tvsh_number,Be);if(!ue)throw new Error("Profili i TVSH-së mungon ose kërkon rishikim. Konfirmojeni statusin e biznesit për TVSH para shitjes taxi.");const Qt=ue.vatRate===0?z:Number((z/1.18).toFixed(6)),mr=Number((z-Qt).toFixed(2)),Pr=Ce?.operators?.[0]?.id||null;if(typeof window<"u"&&window.electronAPI?.isElectron===!0&&window.electronAPI.platform==="win32"){const xt=String(t?.fiscal_environment||"").trim().toLowerCase(),ot=["prod","production","live"].includes(xt)?"PROD":"TEST",q={companyId:r,businessUnitId:V.id,businessNui:Number(t?.sef_nui_numeric||t?.nui||t?.fiscal_number||0),branchId:Number(V.sef_branch_id||0),posId:Number(V.sef_pos_id||0),sefId:String(V.sef_fiscalization_no||t?.sef_fiscalization_no||"").trim(),environment:ot,fiscalDay:it};if(!Number.isSafeInteger(q.businessNui)||q.businessNui<=0||!Number.isSafeInteger(q.branchId)||q.branchId<=0||!Number.isSafeInteger(q.posId)||q.posId<=0||!q.sefId)throw new Error("Shitja taxi në Windows u ndal: NUI, njësia, Branch, POS dhe numri i fiskalizimit duhet të përputhen me POS-in aktiv.");if(G){if(ie=await fi(q),!ie)throw new Error("Ky POS Windows nuk ka autoritetin dhe nënshkruesin lokal të verifikuar për shitje offline.")}else{if(Sa(r,{businessUnitId:q.businessUnitId,branchId:q.branchId,posId:q.posId,sefId:q.sefId}),!await Cn(r,{businessNui:q.businessNui,allowRemote:!0,throwOnError:!0,context:{businessUnitId:q.businessUnitId,businessNui:q.businessNui,branchId:q.branchId,posId:q.posId,sefId:q.sefId,applicationId:Number(t?.sef_application_id||0)||void 0,environment:ot}}))throw new Error("Nënshkruesi lokal i POS-it të taksisë nuk u provizionua.");if(ie=await gi(q),!ie)throw new Error("Autoriteti lokal fiskal i POS-it të taksisë nuk u aktivizua.");G=!0}Me=ie}const Wr=await H({id:E.id,status:"paused",arrival_time:ke.toISOString(),end_reading:h,current_reading:h,meter_total:z,duration_seconds:se,updated_at:ke.toISOString()}),ne=E.id,ir=`taxi-trip-${E.id}`,dt=G?nd(E.id):Li(E.id),vr={amount:z,method:"cash",notes:`Taxi · ${V.vehicle_plate_number}`},ut={id:ne,company_id:r,client_id:null,customer_display_name:"Klient pa emër",invoice_number:dt,invoice_date:it,status:"paid",subtotal:Qt,tax_total:mr,grand_total:z,invoice_channel:"b2c_receipt",fiscal_business_unit_id:V.id,fiscal_operator_id:Pr,invoice_delivery_mode:F==="paper"?"paper":"electronic_pdf",delivery_channel:F==="email"?"email":"download",atk_supply_type:ue.atkSupplyType,fiscal_operation_mode:"hybrid",is_fiscalized:!1,fiscal_status:"pending",fiscalized_at:null,fiscal_fik:null,fiscal_nivf:null,fiscal_verification_token:null,created_at:Be,updated_at:Be,delivery_evidence:{source:G?"pos_terminal_v3":"taximeter_realtime",category:"taxi",deliveryChoice:F,deliveryRecipient:F==="email"?pt.trim().toLowerCase():null,...G?{offlineReplay:!0,fiscalDate:it,dailyCouponCounter:null,chronologicalFiscalNumber:null,business_unit_id:V.id,operator_id:Pr,branch_id:V.sef_branch_id||null,pos_id:V.sef_pos_id||null,posPayment:vr,posPayments:[vr]}:{},taximeterDeviceId:E.deviceId,tripSessionId:Wr.id,transport:{pricingMode:"taximeter",taximeter:{deviceId:E.deviceId,serviceType:E.serviceType,driverName:ce.trim()||null,vehiclePlate:V.vehicle_plate_number,departureTime:E.departureTime,arrivalTime:ke.toISOString(),durationSeconds:se,durationMinutes:Math.ceil(se/60),startReading:E.startReading,endReading:h,kilometers:Number(L.toFixed(3)),meterTotal:z,capturedAt:ke.toISOString()}}}},Dt=[{id:`${ne}:item:0`,company_id:r,invoice_id:ne,product_name:"Shërbim taxi me taksimetër",product_sku:"TAXI-SERVICE",line_type:"service",fiscal_category_code:"STR",fiscal_measurement_unit_code:"UDH",quantity:1,price:Qt,tax_rate:ue.vatRate,vat_norm:ue.vatNorm,discount_percent:0,discount_amount:0,total:z}],Xt=[{id:`taxi-service-${E.id}`,name:"Shërbim taxi me taksimetër",price:Qt,taxRate:ue.vatRate,vatNorm:ue.vatNorm,sku:"TAXI-SERVICE",measurementUnit:"UDH",productCategory:"STR",barcode:null,discountPercent:0,quantity:1}],zt=$n(Xt);if(Math.round(zt.total*100)!==Math.round(z*100))throw new Error("Totali i taksimetrit nuk përputhet me shumën e kuponit pas rrumbullakimit në cent.");let or=null,Ie;if(Me){const xt=window.electronAPI?.localDb;if(!xt?.previewFiscalNumber||!xt.getSnapshot)throw new Error("Windows SQLite nuk mbështet preview dhe commit atomik fiskal. Përditësoni aplikacionin.");const ot=Number(V.sef_branch_id||0),q=Number(V.sef_pos_id||0),Ze=String(V.sef_fiscalization_no||t?.sef_fiscalization_no||"").trim(),Pt=await ol(r),Zt=xe=>xe.entityId===ne||xe.entity_id===ne||xe.localId===ne||xe.local_id===ne,Lt=Pt.filter(xe=>xe.entity==="invoice"&&Zt(xe)),Sr=Pt.filter(xe=>xe.entity==="fiscal_coupon"&&Zt(xe));if(Lt.length||Sr.length){if(Lt.length!==1||Sr.length!==1)throw new Error("Shitja taxi ekzistuese është e paplotë ose e dyfishuar në radhën lokale; ndalova pa krijuar kupon tjetër.");const[xe,Nt]=[Lt[0],Sr[0]];if(Nt.tamperDetected||xe.operation!=="create"||Nt.operation!=="create"||String(xe.companyId||"")!==r||String(Nt.companyId||"")!==r||["conflict","requires_review"].includes(String(xe.status))||["conflict","requires_review"].includes(String(Nt.status)))throw new Error("Shitja taxi ekzistuese kërkon rishikim të sinkronizimit; nuk do të nënshkruhet përsëri.");const[Ye,i]=await Promise.all([aa(xe),aa(Nt)]),x=Ye?.invoice||Ye,C=await ll(i,Nt.contentHash||i?.contentHash),_=String(i?.qrCodeUrl||i?.qrData||"");if(String(x?.id||"")!==ne||String(i?.invoiceId||i?.invoice_id||i?.id||"")!==ne||C.status!=="valid"||!Dr({qrCodeUrl:_})||!String(i?.signature||"").trim()||Number(i?.branchId||i?.branch_id)!==ot||Number(i?.posId||i?.pos_id)!==q||String(i?.sefIdentifier||i?.sefId||"").trim()!==Ze||!Number.isSafeInteger(Number(i?.dailyCouponCounter))||!Number.isSafeInteger(Number(i?.documentNumber)))throw new Error("Kuponi lokal i ruajtur nuk e kaloi kontrollin e integritetit/identitetit; shitja mbetet për rishikim.");or=i,Ie={...x,clients:null,offline_pending:!0}}else{const xe=await Xl({companyId:r,businessUnitId:V.id,branchId:ot,posId:q,sefId:Ze,fiscalDay:it,transactionId:ne},{previewFiscalNumber:be=>xt.previewFiscalNumber(be),getSnapshot:xt.getSnapshot.bind(xt)}),Ye={...Ea({invoice:ut,cart:Xt,company:t,paymentMethod:"cash",totals:{subtotal:zt.subtotal,discountTotal:zt.discountTotal,grossDiscountTotal:zt.grossDiscountTotal,manualDiscountGrossTotal:zt.manualDiscountGrossTotal,taxTotal:zt.taxTotal,total:zt.total},cashTendered:z,createdAt:Be,fiscalContext:{businessUnitId:V.id,operatorId:Pr||void 0,operatorName:ce.trim()||void 0,businessNui:Number(t?.sef_nui_numeric||t?.nui||0)||void 0,branchId:ot,posId:q,sefId:Ze,applicationId:Number(t?.sef_application_id||0)||void 0}}),branchId:ot,posId:q,sefIdentifier:Ze,dailyCouponCounter:xe.dailyCouponCounter,documentNumber:xe.documentNumber,atkCouponId:xe.atkCouponId,fiscalDate:it,fiscalTransactionId:ne},i=await Ca("sign_offline_coupon",{offline:!0,coupon:{...Ye,id:ne,invoiceId:ne,businessUnitId:V.id,operatorId:Ye.operatorId}}),x=String(i?.qrData||i?.qrCodeUrl||"");if(!Dr({qrCodeUrl:x}))throw new Error("Kuponi taxi Windows kërkon CitizenCoupon QR të firmosur lokalisht.");const C=String(i?.verificationNo||"").trim().toUpperCase(),_=String(Ye.verificationNo||Ye.nuikf||"").trim().toUpperCase(),re=Number(i?.couponId||0);if(!C||C!==_||C===String(re)||re!==xe.atkCouponId||!String(i?.signature||"").trim())throw new Error("Nënshkrimi lokal taxi nuk përputhet me NUIKF ose CouponId e rezervuar.");or={...Ye,id:ne,invoiceId:ne,companyId:r,businessUnitId:V.id,qrCodeUrl:x,signature:i.signature,atkCouponId:re,nuikf:_,verificationNo:C,status:"signed",offlineMode:!0,offlineReason:"signed_locally_offline",atkStatus:"pending_sync"};const qe={...ut,id:ne,pos_idempotency_key:ir,is_fiscalized:!1,fiscal_status:"pending",fiscalized_at:null,fiscal_fik:null,fiscal_nivf:null,fiscal_verification_token:null,fiscal_qr_url:x},Ft=((await ri([{entity:"invoice",operation:"create",companyId:r,payload:{companyId:r,invoice:qe,items:Dt,replayPosPayment:!0,posIdempotencyKey:ir}
2,entityId:ne,idempotencyKey:ir},{entity:"fiscal_coupon",operation:"create",companyId:r,localId:ne,entityId:ne,payload:or,idempotencyKey:`${ir}:fiscal-coupon`,branchId:ot}],{fiscalAllocations:xe.fiscalAllocations,counterSnapshots:xe.counterSnapshots,replicaRecords:[{companyId:r,entityType:"invoices",entityId:ne,payload:qe,syncStatus:"pending"},...Dt.map(be=>({companyId:r,entityType:"invoice_items",entityId:String(be.id),payload:be,syncStatus:"pending"})),{companyId:r,entityType:"fiscal_coupons",entityId:ne,branchId:ot,payload:or,syncStatus:"pending"}],auditEvents:[{eventId:`offline-sale:${ne}`,entity:"invoice",entityId:ne,operation:"create",eventType:"offline_sale_committed",idempotencyKey:ir,payload:{invoiceId:ne,couponId:ne,branchId:ot,posId:q,fiscalNumber:re}}]})).records||[]).find(be=>be.entity==="fiscal_coupon"&&(be.entityId===ne||be.entity_id===ne));Ft&&(or=await aa(Ft)),Ie={...qe,clients:null,offline_pending:!0}}}else Ie=await m.mutateAsync({invoice:ut,items:Dt,posIdempotencyKey:ir,preferOffline:G,forceOnline:!G,suppressToast:!0});if(!Ie?.id)throw new Error("Fatura taxi nuk u ruajt; udhëtimi mbetet i hapur për rikuperim.");if(Ie?.id){if((Ie?.offline_pending?null:await u.mutateAsync({invoiceId:Ie.id,amount:z,method:"cash",notes:`Taxi · ${V.vehicle_plate_number}`,idempotencyKey:`taxi-trip-${E.id}:payment`,suppressToast:!0}))?.approval_pending){f.warning("Pagesa e udhëtimit u dërgua për aprovim; kuponi fiskal nuk u transmetua ende."),g();return}if(Ie?.offline_pending){if(or){if(F==="paper"){if(!await sa(or,t,{preparedWindow:A,isCopy:!1,language:a,silent:zr()&&Ar()}))throw new Error("Kuponi u ruajt lokalisht, por printimi nuk u konfirmua; udhëtimi mbetet i hapur për riprovim.")}else if(!await Ct({invoiceId:Ie.id,coupon:or,choice:F,recipientEmail:pt}))throw new Error("Kuponi u ruajt lokalisht, por dorëzimi elektronik dështoi; udhëtimi mbetet i hapur për riprovim.");await H({id:E.id,status:"completed",arrival_time:ke.toISOString(),end_reading:h,current_reading:h,meter_total:z,duration_seconds:se,updated_at:ke.toISOString()}),f.info("Kuponi taxi u ruajt me firmën dhe numrat e pandryshuar; sinkronizimi do të vazhdojë kur rrjeti të jetë i disponueshëm."),g(),at(null),Fe(""),J(""),Ke(""),await l.invalidateQueries({queryKey:["taxi-pos-workspace",r]});return}const Ze=Number(V.sef_branch_id||0),Pt=Number(V.sef_pos_id||0),Zt=String(V.sef_fiscalization_no||t?.sef_fiscalization_no||"").trim();if(!Number.isSafeInteger(Ze)||Ze<=0||!Number.isSafeInteger(Pt)||Pt<=0||!Zt)throw new Error("Shitja taxi offline u ndal: Branch ID, POS ID dhe SEF identifier duhet të jenë të konfiguruara.");const Lt=_a(Be),Sr=await qn(r,V.id,Pn,{branchId:Ze,posId:Pt,sefId:Zt,fiscalDay:Lt,transactionId:Ie.id}),xe=await qn(r,V.id,Pa,{branchId:Ze,posId:Pt,sefId:Zt,fiscalDay:Lt,transactionId:`${Ie.id}:chronological`}),Nt=[{id:`taxi-service-${E.id}`,name:"Shërbim taxi me taksimetër",price:Qt,taxRate:ue.vatRate,vatNorm:ue.vatNorm,sku:"TAXI-SERVICE",measurementUnit:"UDH",productCategory:"STR",barcode:null,discountPercent:0,quantity:1}],Ye=$n(Nt),x={...Ea({invoice:Ie,cart:Nt,company:t,paymentMethod:"cash",totals:{subtotal:Ye.subtotal,discountTotal:Ye.discountTotal,grossDiscountTotal:Ye.grossDiscountTotal,manualDiscountGrossTotal:Ye.manualDiscountGrossTotal,taxTotal:Ye.taxTotal,total:Ye.total},cashTendered:z,createdAt:Be,fiscalContext:{businessUnitId:V.id,operatorId:Pr,operatorName:ce.trim()||void 0,businessNui:Number(t?.sef_nui_numeric||t?.nui||0)||void 0,branchId:Ze,posId:Pt,sefId:Zt,applicationId:Number(t?.sef_application_id||0)||void 0}}),branchId:Ze,posId:Pt,sefIdentifier:Zt,dailyCouponCounter:Sr,documentNumber:xe,fiscalDate:Lt,fiscalTransactionId:Ie.id},C=await Ca("sign_offline_coupon",{offline:!0,coupon:{...x,id:Ie.id,invoiceId:Ie.id,businessUnitId:V.id,operatorId:x.operatorId}}),_=String(C?.qrData||C?.qrCodeUrl||"");if(!_.includes("|"))throw new Error("Kuponi taxi offline kërkon Citizen Coupon QR të firmosur.");const re=String(C?.verificationNo||"").trim().toUpperCase(),qe=String(x.verificationNo||x.nuikf||"").trim().toUpperCase(),wt=String(C?.couponId||"").trim();
2if(!re||re!==qe||re===wt)throw new Error("VerificationNo/NUIKF i taxi-kuponit nuk përputhet me snapshot-in lokal ose është i barabartë me CouponId.");const Ft={...x,id:Ie.id,invoiceId:Ie.id,businessUnitId:V.id,qrCodeUrl:_,signature:C.signature,atkCouponId:Number(C.couponId||0)||void 0,nuikf:qe,verificationNo:re,status:"signed",offlineMode:!0,offlineReason:"signed_locally_offline"};await cl({...Ft,companyId:r,atkStatus:"pending_sync"}),F==="paper"?await sa(Ft,t,{preparedWindow:A,isCopy:!1,language:a,silent:zr()&&Ar()}):await Ct({invoiceId:Ie.id,coupon:Ft,choice:F,recipientEmail:pt}),await H({id:E.id,status:"completed",arrival_time:ke.toISOString(),end_reading:h,current_reading:h,meter_total:z,duration_seconds:se,updated_at:ke.toISOString()}),f.info("Udhëtimi u ruajt offline dhe kuponi Citizen Coupon u përgatit për sinkronizim."),g(),at(null),Fe(""),J(""),Ke(""),await l.invalidateQueries({queryKey:["taxi-pos-workspace",r]});return}const ot=await Ln(Ie.id,t,{requireAtkProof:!1,waitForCouponMs:4e3});if(!ot)throw new Error("Kuponi fiskal nuk u krijua për udhëtimin.");f.info("Kuponi taxi u ruajt; po dërgohet në ATK…",{id:`atk-transmit-${ot.id||Ie.id}`,description:"Po pritet përgjigjja e ruajtur nga ATK. Mos e përsëritni udhëtimin."}),Qe(!0);let q;try{q=await ni(ot)}finally{Qe(!1)}q.success&&!q.queued?(f.success("Udhëtimi u mbyll dhe kuponi fiskal u pranua nga ATK."),await ye(Ie.id,A)||g()):(f.info("Udhëtimi u mbyll; kuponi fiskal po dërgohet në ATK."),ai({couponId:ot.id||Ie.id,intervalMs:500,timeoutMs:3e4}).then(async Ze=>{Ze.success&&!Ze.queued?(f.success("Kuponi fiskal u konfirmua nga ATK."),await ye(Ie.id,A)||g()):g()}).catch(()=>g()))}await H({id:E.id,status:"completed",arrival_time:ke.toISOString(),end_reading:h,current_reading:h,meter_total:z,duration_seconds:se,updated_at:ke.toISOString()}),at(null),Fe(""),J(""),Ke(""),await l.invalidateQueries({queryKey:["taxi-pos-workspace",r]})}catch(G){g(),f.error(G instanceof Error?G.message:"Udhëtimi u ruajt me gabim.")}finally{nr.current=!1,er(!1)}},kt=async()=>{if(!V?.id||!Kt||!Se.trim())return f.error("Zgjidh një model taxi të kataloguar, plotëso numrin serik dhe njësinë.");er(!0);const{error:h}=await ee.from("taximeter_devices").insert({company_id:r,business_unit_id:V.id,model:Kt.officialModel,serial_number:Se.trim(),protocol:Kt.protocolKey,connection_type:ae,connection_status:"offline"});if(er(!1),h)return f.error(h.message);Ge(""),Tt(""),de(""),ze("gateway"),Re(!1),await Rt(),f.success("Taksimetri u regjistrua.")};return Pe?e.jsx("div",{className:"flex min-h-[70vh] items-center justify-center bg-[#06101d] text-slate-300",children:e.jsx(qt,{className:"h-6 w-6 animate-spin"})}):e.jsxs("div",{"data-pos-design":pe.designId,"data-fiscal-engine":fn,className:"min-h-[calc(100vh-4rem)] bg-[#06101d] text-slate-100",children:[e.jsx("div",{className:"border-b border-white/10 bg-[#081a2c]/95 px-4 py-3 sm:px-6",children:e.jsxs("div",{className:"mx-auto flex min-w-0 max-w-[1600px] items-center justify-between gap-2 sm:gap-4",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2 sm:gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-blue-500/15 text-blue-300 sm:h-10 sm:w-10",children:e.jsx(Ls,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-bold tracking-tight sm:text-base",children:"TAXI PRO"}),e.jsx("div",{className:"hidden truncate text-[11px] text-slate-400 sm:block",children:"Paneli i taksisë · Shtojca H"})]})]}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-right sm:flex",children:[e.jsx(Zn,{status:ht,pendingCount:Le,compact:!0}),e.jsxs("div",{className:"hidden sm:block",children:[e.jsx("div",{className:"text-sm font-semibold",children:"Taksimetri realtime"}),e.jsx("div",{className:"text-[11px] text-emerald-300",children:he?.connection_status==="connected"?"LIDHUR":"GATI PËR LIDHJE"})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1 sm:gap-2",children:[e.jsxs(rt,{variant:"outline",size:"sm",onClick:()=>gr("return"),className:"border-amber-400/30 px-2 text-amber-200 hover:bg-amber-400/10 sm:px-3","aria-label":"Kthim",children:[e.jsx(Us,{className:"h-3.5 w-3.5 sm:mr-1.5"})," ",e.jsx("span",{className:"hidden sm:inline",children:"Kthim"})]}),e.jsxs(rt,{variant:"outline",size:"sm",onClick:()=>gr("void"),className:"border-red-400/30 px-2 text-red-200 hover:bg-red-400/10 sm:px-3","aria-label":"Anulim",children:[e.jsx(Bs,{className:"h-3.5 w-3.5 sm:mr-1.5"})," ",e.jsx("span",{className:"hidden sm:inline",children:"Anulim"})]}),e.jsx(rt,{variant:"ghost",size:"icon",className:"text-slate-300",asChild:!0,children:e.jsx(ua,{to:"/dashboard","aria-label":"Kthehu në panel",children:e.jsx(Ka,{className:"h-4 w-4"})})})]}),e.jsxs("div",{className:"hidden shrink-0 text-right sm:block",children:[e.jsx("div",{className:"text-sm font-semibold",children:new Date().toLocaleTimeString("sq-XK",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),e.jsx("div",{className:"text-[11px] text-slate-400",children:new Date().toLocaleDateString("sq-XK")})]})]})}),e.jsxs("div",{className:"mx-auto max-w-[1600px] space-y-4 p-4 sm:p-6",children:[e.jsx("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:[["TË ARDHURAT SOT",oa(St),`${tt.length} udhëtime`,"text-emerald-300"],["UDHËTIME SOT",String(tt.length),"Të mb
2yllura me kupon","text-blue-300"],["KM TË PËRSHKUARA",`${Gt.toFixed(1)} km`,"Nga udhëtimet e fiskalizuara","text-violet-300"],["KUPONAT E LËSHUAR",String(tt.length),"Automatikisht pas udhëtimit","text-amber-300"]].map(([h,z,L,A])=>e.jsx(gn,{className:"border-white/10 bg-[#0b2033]/80",children:e.jsxs(vn,{className:"p-4",children:[e.jsx("div",{className:"text-[11px] font-semibold tracking-wide text-slate-400",children:h}),e.jsx("div",{className:I("mt-2 text-2xl font-bold",A),children:z}),e.jsx("div",{className:"mt-1 text-xs text-slate-500",children:L})]})},h))}),e.jsxs("div",{className:"grid gap-4 xl:grid-cols-[minmax(0,1.55fr)_minmax(320px,0.85fr)]",children:[e.jsxs(gn,{className:"border-white/10 bg-[#0b2033]/90",children:[e.jsx(ra,{className:"border-b border-white/10 pb-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(na,{className:"flex items-center gap-2 text-base",children:[e.jsx(An,{className:"h-4 w-4 text-blue-300"})," UDHËTIM AKTUAL",e.jsx(tn,{className:I("ml-1",E?"bg-emerald-500/20 text-emerald-300":"bg-slate-700 text-slate-300"),children:E?"AKTIV":"GATI"})]}),e.jsx(tn,{variant:"outline",className:"border-white/15 text-slate-300",children:V?.vehicle_plate_number||"TARGA MUNGON"})]})}),e.jsxs(vn,{className:"space-y-5 p-5",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#071524] p-4",children:[e.jsx("div",{className:"text-xs text-slate-500",children:"TARIFA AKTUALE"}),e.jsx("div",{className:"mt-1 text-4xl font-bold text-emerald-300",children:oa(E?Number(w||E.meterTotal):0)})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#071524] p-4",children:[e.jsx("div",{className:"text-xs text-slate-500",children:"DISTANCA"}),e.jsx("div",{className:"mt-2 text-xl font-semibold",children:E?`${Math.max(0,Number(We||E.currentReading)-E.startReading).toFixed(2)} km`:"0.00 km"})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#071524] p-4",children:[e.jsx("div",{className:"text-xs text-slate-500",children:"KOHA"}),e.jsx("div",{className:"mt-2 text-xl font-semibold",children:E?ld(se):"00:00:00"})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-4",children:[e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Njësia taxi"}),e.jsxs($t,{value:E?.unitId||N,onValueChange:O,disabled:!!E,children:[e.jsx(Vt,{className:"mt-1 border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{placeholder:"Zgjidh njësinë"})}),e.jsx(Wt,{children:jt.map(h=>e.jsxs(Oe,{value:h.id,children:[h.name," · ",h.vehicle_plate_number||"Pa targë"]},h.id))})]})]}),e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Taksimetri"}),e.jsxs($t,{value:E?.deviceId||B,onValueChange:$,disabled:!!E,children:[e.jsx(Vt,{className:"mt-1 border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{placeholder:"Zgjidh pajisjen"})}),e.jsx(Wt,{children:yt.map(h=>e.jsxs(Oe,{value:h.id,children:[h.model," · ",h.serial_number]},h.id))})]})]}),e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Tarifa"}),e.jsxs($t,{value:E?.serviceType||b,onValueChange:Y,disabled:!!E,children:[e.jsx(Vt,{className:"mt-1 border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"1T",children:"1T · Ditë"}),e.jsx(Oe,{value:"2T",children:"2T · Natë"}),e.jsx(Oe,{value:"3T",children:"3T · Ndër-qytet"})]})]})]}),e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Vozitësi"}),e.jsx(nt,{value:ce,onChange:h=>k(h.target.value),placeholder:"Emri i vozitësit",disabled:!!E,className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]})]}),E&&e.jsxs("div",{className:"grid gap-3 border-t border-white/10 pt-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Leximi realtime (km)"}),e.jsx(nt,{type:"number",min:"0",step:"0.001",value:We||E.currentReading,onChange:h=>{Fe(h.target.value),Te("current_reading",h.target.value)},className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]}),e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Totali nga taksimetri (€)"}),e.jsx(nt,{type:"number",min:"0",step:"0.01",value:w||E.meterTotal,onChange:h=>{J(h.target.value),Te("meter_total",h.target.value)},className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]})]}),!E&&e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Leximi fillestar (km)"}),e.jsx(nt,{type:"number",min:"0",step:"0.001",value:Q,onChange:h=>Ke(h.target.value),placeholder:"0.000",className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]}),e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Totali fillestar (€)"}),e.jsx(nt,{type:"number",min:"0",step:"0.01",value:w,onChange:h=>J(h.target.value),placeholder:"0.00",className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]})]}),E&&e.jsxs("div",{className:"grid gap-3 border-t border-white/10 pt-4 md:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Dorëzimi i kuponit"}),e.jsxs($t,{value:F,onValueChange:h=>Et(h),disabled:gt,children:[e.jsx(Vt,{className:"mt-1 border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"paper",children:"Me letër"}),e.jsx(Oe,{value:"without_paper",children:"Pa letër · Print Preview"}),e.jsx(Oe,{value:"email",children:"Email · PDF"})]})]})]}),F==="email"?e.jsxs("div",{children:[e.jsx(ct,{className:"text-xs text-slate-400",children:"Email-i i klientit"}),e.jsx(nt,{type:"email",value:pt,onChange:h=>It(h.target.value),placeholder:"[email protected]",autoComplete:"email",className:"mt-1 border-white/10 bg-[#071524] text-slate-100"})]}):e.jsx("div",{className:"flex items-end",children:e.jsx("div",{className:"w-full rounded-xl border border-white/10 bg-[#071524] px-3 py-2.5 text-xs leading-5 text-slate-400",children:F==="paper"?"Kuponi përdor rrugën ekzistuese të printerit. Fiskalizimi nuk përsëritet për printim.":"Pas pranimit fiskal hapet PDF/QR kanonik në Print Preview brenda FaturaPRO; printeri mbetet i paprekur."})})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs(rt,{onClick:E?sr:bt,disabled:gt||!V?.vehicle_plate_number||!E&&!he,className:I("h-11 min-w-[220px] flex-1 font-semibold",E?"bg-emerald-600 hover:bg-emerald-500":"bg-blue-600 hover:bg-blue-500"),children:[gt?e.jsx(qt,{className:"mr-2 h-4 w-4 animate-spin"}
2):E?e.jsx($r,{className:"mr-2 h-4 w-4"}):e.jsx(os,{className:"mr-2 h-4 w-4"}),E?"PËRFUNDO & LËSHO KUPONIN FISKAL":"NIS UDHËTIMIN"]}),E&&e.jsx(rt,{variant:"outline",onClick:async()=>{await H({id:E.id,status:E.status==="running"?"paused":"running",duration_seconds:se}),at(h=>h&&{...h,status:h.status==="running"?"paused":"running",durationSeconds:se})},className:"h-11 border-white/15 text-slate-200",children:E.status==="running"?"PAUZË":"VAZHDO"})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx(ma,{className:"h-4 w-4 text-emerald-400"})," Pas përfundimit krijohet automatikisht fatura taxi, kuponi fiskal ATK dhe QR-ja e verifikimit."]})]})]}),e.jsxs(gn,{className:"border-white/10 bg-[#0b2033]/90",children:[e.jsx(ra,{className:"border-b border-white/10 pb-4",children:e.jsxs(na,{className:"flex items-center justify-between text-base",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ls,{className:"h-4 w-4 text-blue-300"})," TAKSIMETRI"]}),e.jsxs(rt,{variant:"ghost",size:"sm",onClick:()=>Re(h=>!h),className:"text-xs text-slate-300",children:[e.jsx(no,{className:"mr-1 h-3.5 w-3.5"})," Konfiguro"]})]})}),e.jsxs(vn,{className:"space-y-4 p-5",children:[he?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#071524] p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold",children:he.model}),e.jsxs("div",{className:"text-xs text-slate-500",children:["S/N: ",he.serial_number]})]}),e.jsx(tn,{className:he.connection_status==="connected"?"bg-emerald-500/20 text-emerald-300":"bg-amber-500/20 text-amber-300",children:he.connection_status==="connected"?"LIDHUR":"GATI"})]}),e.jsxs("div",{className:"mt-4 grid grid-cols-2 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-500",children:"Protokolli"}),e.jsx("div",{className:"mt-1 text-slate-200",children:he.protocol})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-500",children:"Lidhja"}),e.jsxs("div",{className:"mt-1 flex items-center gap-1 text-slate-200",children:[he.connection_type==="bluetooth"?e.jsx(ao,{className:"h-3.5 w-3.5"}):e.jsx(so,{className:"h-3.5 w-3.5"}),he.connection_type]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-500",children:"Firmware"}),e.jsx("div",{className:"mt-1 text-slate-200",children:he.firmware_version||"—"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-500",children:"Heartbeat"}),e.jsx("div",{className:"mt-1 text-slate-200",children:od(he.last_seen_at)})]})]})]}),e.jsxs("div",{className:"rounded-xl border border-blue-400/15 bg-blue-500/5 p-3 text-xs text-slate-400",children:[e.jsxs("div",{className:"flex items-center gap-2 font-medium text-blue-200",children:[e.jsx(io,{className:"h-4 w-4"})," Gateway vendor-neutral"]}),e.jsx("p",{className:"mt-1 leading-5",children:"Të dhënat normalizohen nga POS Agent/Gateway me protokollin e prodhuesit dhe ruhen me numër sekuence për auditim."})]})]}):e.jsxs("div",{className:"rounded-xl border border-dashed border-white/15 p-5 text-center",children:[e.jsx(oo,{className:"mx-auto h-7 w-7 text-slate-500"}),e.jsx("div",{className:"mt-2 font-medium",children:"Nuk ka taksimetër të regjistruar"}),e.jsx("p",{className:"mt-1 text-xs text-slate-500",children:"Regjistro pajisjen për njësinë e zgjedhur."})]}),Z&&e.jsxs("div",{className:"space-y-3 border-t border-white/10 pt-4",children:[e.jsxs($t,{value:je,onValueChange:h=>{const z=ia.find(L=>L.officialModel===h);Ge(h),de(z?.protocolKey||""),ze(z?.confirmedTransports.some(L=>L==="bluetooth")?"bluetooth":"serial")},children:[e.jsx(Vt,{className:"border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{placeholder:"Modeli i certifikuar nga ATK"})}),e.jsx(Wt,{children:ia.map(h=>e.jsxs(Oe,{value:h.officialModel,children:[h.officialModel,"taximeterModel"in h&&h.taximeterModel?` · ${h.taximeterModel}`:""]},h.catalogKey))})]}),e.jsx(nt,{value:Se,onChange:h=>Tt(h.target.value),placeholder:"Numri serik",className:"border-white/10 bg-[#071524] text-slate-100"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(nt,{value:et,readOnly:!0,placeholder:"Profili i integrimit",className:"border-white/10 bg-[#071524] text-slate-100"}),e.jsxs($t,{value:ae,onValueChange:ze,children:[e.jsx(Vt,{className:"border-white/10 bg-[#071524] text-slate-100",children:e.jsx(Ht,{})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"gateway",children:"Gateway"}),e.jsx(Oe,{value:"serial",children:"Serial / USB-Serial"}),e.jsx(Oe,{value:"bluetooth",children:"Bluetooth"}),e.jsx(Oe,{value:"tcp",children:"TCP"}),e.jsx(Oe,{value:"websocket",children:"WebSocket"})]})]})]}),e.jsx("p",{className:"text-[11px] leading-4 text-slate-500",children:"Modelet jashtë listës zyrtare nuk regjistrohen pa evidencë të re nga ATK/AMK dhe adapter të furnizuesit."}),e.jsx(rt,{onClick:kt,disabled:gt,className:"w-full",children:"Regjistro taksimetrin"})]})]})]})]}),e.jsxs(gn,{className:"border-white/10 bg-[#0b2033]/90",children:[e.jsxs(ra,{className:"flex flex-row items-center justify-between border-b border-white/10 pb-4",children:[e.jsxs(na,{className:"flex items-center gap-2 text-base",children:[e.jsx(En,{className:"h-4 w-4 text-blue-300"})," UDHËTIMET E FUNDIT"]}),e.jsxs(rt,{variant:"ghost",size:"sm",onClick:()=>
2void Rt(),className:"text-slate-300",children:[e.jsx(zs,{className:"mr-1 h-3.5 w-3.5"})," Rifresko"]})]}),e.jsxs(vn,{className:"p-0",children:[e.jsxs("div",{className:"hidden grid-cols-[1.2fr_0.7fr_0.8fr_0.8fr_0.7fr] gap-3 border-b border-white/10 px-5 py-3 text-[10px] font-semibold uppercase tracking-wide text-slate-500 md:grid",children:[e.jsx("span",{children:"Data / Ora"}),e.jsx("span",{children:"Distanca"}),e.jsx("span",{children:"Koha"}),e.jsx("span",{children:"Tarifa"}),e.jsx("span",{children:"Statusi"})]}),Ot.slice(0,8).map(h=>{const z=h.delivery_evidence?.transport?.taximeter||{};return e.jsxs("div",{className:"grid gap-2 border-b border-white/5 px-5 py-3 text-sm md:grid-cols-[1.2fr_0.7fr_0.8fr_0.8fr_0.7fr] md:items-center",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-400"}),new Date(h.created_at).toLocaleString("sq-XK",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"})]}),e.jsxs("span",{className:"text-slate-300",children:[Number(z.kilometers||0).toFixed(2)," km"]}),e.jsxs("span",{className:"text-slate-300",children:[z.durationMinutes||Math.ceil(Number(z.durationSeconds||0)/60)||0," ","min"]}),e.jsx("span",{className:"font-semibold text-slate-100",children:oa(Number(h.grand_total||0))}),e.jsx("span",{className:"text-emerald-300",children:"Kuponi ATK"})]},h.id)}),Ot.length===0&&e.jsx("div",{className:"p-8 text-center text-sm text-slate-500",children:"Nuk ka udhëtime të mbyllura sot."})]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-5",children:[e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#0b2033] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx(Rn,{className:"h-4 w-4"})," TARIFA BAZË"]}),e.jsx("div",{className:"mt-2 text-lg font-semibold",children:"1.50 €"})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#0b2033] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx(os,{className:"h-4 w-4"})," TARIFA PËR KM"]}),e.jsx("div",{className:"mt-2 text-lg font-semibold",children:"1.20 €"})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#0b2033] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx(On,{className:"h-4 w-4"})," TARIFA PËR KOHË"]}),e.jsx("div",{className:"mt-2 text-lg font-semibold",children:"0.20 € /min"})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#0b2033] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx(ls,{className:"h-4 w-4"})," KUFI I SHPEJTËSISË"]}),e.jsx("div",{className:"mt-2 text-lg font-semibold",children:"80 km/h"})]}),e.jsxs("div",{className:"rounded-xl border border-white/10 bg-[#0b2033] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[e.jsx("span",{className:"text-base font-bold",children:"%"})," NORMA E TVSH-SË"]}),e.jsx("div",{className:"mt-2 text-lg font-semibold",children:y?"…":P?`${P.vatRate}%`:"Kërkon verifikim"})]})]})]}),e.jsx(zn,{open:rr!==null,onOpenChange:h=>{h||gr(null)},companyId:r,mode:rr||"return"})]})}const la=()=>{const t=Tl.getPlatform();return t==="android"||t==="ios"},ud={pharmacy:{accent:"bg-emerald-500",accentSoft:"bg-emerald-500/15",accentBorder:"border-emerald-400/30",accentText:"text-emerald-300",accentButton:"bg-emerald-500 hover:bg-emerald-400 text-white",accentButtonGhost:"border-emerald-400/30 bg-emerald-500/10 text-emerald-100 hover:bg-emerald-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#081a16]",shell:"border-emerald-500/15 bg-[linear-gradient(180deg,#07131f_0%,#0a1722_100%)]",title:"POS - Farmaci",menu:["Shitje","Produkte","Klientë","Receta","Raporte","Inventar","Cilësime"],tabs:["Të gjitha","Barnat","Vitamina","Kujdesi","Bebë & Nënë","Të tjera"],terminalLabel:"Terminali i farmacisë"},medical_clinic:{accent:"bg-rose-500",accentSoft:"bg-rose-500/15",accentBorder:"border-rose-400/30",accentText:"text-rose-300",accentButton:"bg-rose-500 hover:bg-rose-400 text-white",accentButtonGhost:"border-rose-400/30 bg-rose-500/10 text-rose-100 hover:bg-rose-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#240d16]",shell:"border-rose-500/15 bg-[linear-gradient(180deg,#190b13_0%,#29101a_100%)]",title:"PO
2S - Mjekë / Klinika",menu:["Shitje","Shërbime","Pacientë","Vizita","Raporte","Pagesa","Cilësime"],tabs:["Të gjitha","Konsultime","Analiza","Procedura","Terapie","Të tjera"],terminalLabel:"Terminali i klinikës"},retail_market:{accent:"bg-blue-500",accentSoft:"bg-blue-500/15",accentBorder:"border-blue-400/30",accentText:"text-blue-300",accentButton:"bg-blue-500 hover:bg-blue-400 text-white",accentButtonGhost:"border-blue-400/30 bg-blue-500/10 text-blue-100 hover:bg-blue-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#0a1730]",shell:"border-blue-500/15 bg-[linear-gradient(180deg,#09101f_0%,#0d1931_100%)]",title:"POS - Market / Retail",menu:["Shitje","Produkte","Klientë","Raporte","Inventar","Oferta","Cilësime"],tabs:["Të gjitha","Ushqime","Pije","Shtëpi","Higjienë","Të ngira","Të tjera"],terminalLabel:"Terminali i marketit"},auto_mechanic:{accent:"bg-orange-500",accentSoft:"bg-orange-500/15",accentBorder:"border-orange-400/30",accentText:"text-orange-300",accentButton:"bg-orange-500 hover:bg-orange-400 text-white",accentButtonGhost:"border-orange-400/30 bg-orange-500/10 text-orange-100 hover:bg-orange-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#19120b]",shell:"border-orange-500/15 bg-[linear-gradient(180deg,#0e0f14_0%,#1b140d_100%)]",title:"POS - Mekanik / Servis",menu:["Shitje","Produkte","Klientë","Shërbime","Raporte","Inventar","Takime"],tabs:["Të gjitha","Pjesë Këmbimi","Vajra","Filtra","Bateri","Shërbime"],terminalLabel:"Terminali i servisit"},restaurant_cafe:{accent:"bg-amber-600",accentSoft:"bg-amber-500/15",accentBorder:"border-amber-400/30",accentText:"text-amber-300",accentButton:"bg-amber-600 hover:bg-amber-500 text-white",accentButtonGhost:"border-amber-400/30 bg-amber-500/10 text-amber-100 hover:bg-amber-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#1d1106]",shell:"border-amber-500/15 bg-[linear-gradient(180deg,#18110b_0%,#251206_100%)]",title:"POS - Restorant / Kafe",menu:["Shitje","Tavolina","Menu","Klientë","Raporte","Stok","Cilësime"],tabs:["Të gjitha","Kafe","Pije","Ushqime","Ëmbëlsira","Të tjera"],terminalLabel:"Terminali i turnit"},wholesale:{accent:"bg-violet-500",accentSoft:"bg-violet-500/15",accentBorder:"border-violet-400/30",accentText:"text-violet-300",accentButton:"bg-violet-500 hover:bg-violet-400 text-white",accentButtonGhost:"border-violet-400/30 bg-violet-500/10 text-violet-100 hover:bg-violet-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#150e26]",shell:"border-violet-500/15 bg-[linear-gradient(180deg,#111022_0%,#180f2f_100%)]",title:"POS - Shitje me Shumicë",menu:["Shitje","Produkte","Klientë","Porosi","Raporte","Inventar","Cilësime"],tabs:["Të gjitha","Pije","Ushqime","Higjienë","Ambalazh","Të tjera"],terminalLabel:"Terminali B2B"},services:{accent:"bg-pink-500",accentSoft:"bg-pink-500/15",accentBorder:"border-pink-400/30",accentText:"text-pink-300",accentButton:"bg-pink-500 hover:bg-pink-400 text-white",accentButtonGhost:"border-pink-400/30 bg-pink-500/10 text-pink-100 hover:bg-pink-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#241026]",shell:"border-pink-500/15 bg-[linear-gradient(180deg,#181020_0%,#2b1124_100%)]",title:"POS - Shërbime Profesionale",menu:["Shitje","Shërbime","Klientë","Punonjës","Orari","Raporte","Cilësime"],tabs:["Të gjitha","Flokë","Makeup","Manikyr","Pedikyr","Të tjera"],terminalLabel:"Terminali i shërbimeve"},construction:{accent:"bg-yellow-500",accentSoft:"bg-yellow-500/15",accentBorder:"border-yellow-400/30",accentText:"text-yellow-300",accentButton:"bg-yellow-500 hover:bg-yellow-400 text-slate-950",accentButtonGhost:"border-yellow-400/30 bg-yellow-500/10 text-yellow-100 hover:bg-yellow-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#1e1606]",shell:"border-yellow-500/15 bg-[linear-gradient(180deg,#16120a_0%,#24190b_100%)]",title:"POS - Ndërtim",menu:["Shitje","Produkte","Klientë","Porosi","Raporte","Inventar","Cilësime"],tabs:["Të gjitha","Çimento","Hekur","Gips","Blloqe","Vegla","Të tjera"],terminalLabel:"Terminali i materialeve"},hotel_motel:{accent:"bg-cyan-500",accentSoft:"bg-cyan-500/15",accentBorder:"border-cyan-400/30",accentText:"text-cyan-300",accentButton:"bg-cyan-500 hover:bg-cyan-400 text-slate-950",accentButtonGhost:"border-cyan-400/30 bg-cyan-500/10 text-cyan-100 hover:bg-cyan-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#07181d]",shell:"border-cyan-500/15 bg-[linear-gradient(180deg,#07131c_0%,#0d2228_100%)]",title:"PO
2S - Hotel / Motel",menu:["Shitje","Dhoma","Rezervime","Klientë","Shërbime","Raporte","Cilësime"],tabs:["Të gjitha","Minibar","Room Service","Lavanderi","Dhoma","Të tjera"],terminalLabel:"Terminali i hotelit"},fuel_station:{accent:"bg-red-500",accentSoft:"bg-red-500/15",accentBorder:"border-red-400/30",accentText:"text-red-300",accentButton:"bg-red-500 hover:bg-red-400 text-white",accentButtonGhost:"border-red-400/30 bg-red-500/10 text-red-100 hover:bg-red-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#1a0808]",shell:"border-red-500/15 bg-[linear-gradient(180deg,#180a0a_0%,#241010_100%)]",title:"POS - Karburant",menu:["Shitje","Pompa","Produkte","Klientë","Raporte","Stok","Cilësime"],tabs:["Të gjitha","Benzinë","Naftë","Gaz","Vajra","Të tjera"],terminalLabel:"Terminali i karburantit"},taxi:{accent:"bg-yellow-400",accentSoft:"bg-yellow-400/15",accentBorder:"border-yellow-300/30",accentText:"text-yellow-200",accentButton:"bg-yellow-400 hover:bg-yellow-300 text-slate-950",accentButtonGhost:"border-yellow-300/30 bg-yellow-400/10 text-yellow-100 hover:bg-yellow-400/20",surface:"bg-slate-950/80",sidebar:"bg-[#1a1608]",shell:"border-yellow-400/15 bg-[linear-gradient(180deg,#171307_0%,#231d0a_100%)]",title:"POS - Taksi",menu:["Udhëtime","Vozitës","Klientë","Tarifa","Raporte","Cilësime"],tabs:["Të gjitha","Në qytet","Ndër-qytet","Aeroport","Të tjera"],terminalLabel:"Terminali i taksisë"},general:{accent:"bg-sky-500",accentSoft:"bg-sky-500/15",accentBorder:"border-sky-400/30",accentText:"text-sky-300",accentButton:"bg-sky-500 hover:bg-sky-400 text-white",accentButtonGhost:"border-sky-400/30 bg-sky-500/10 text-sky-100 hover:bg-sky-500/20",surface:"bg-slate-950/80",sidebar:"bg-[#0a1520]",shell:"border-sky-500/15 bg-[linear-gradient(180deg,#08111a_0%,#0d1827_100%)]",title:"POS - Online / E-Commerce",menu:["Shitje","Produkte","Porosi Online","Klientë","Pagesa","Raporte","Cilësime"],tabs:["Të gjitha","Elektronikë","Veshje","Bukuri","Shtëpi","Të tjera"],terminalLabel:"Terminali online"}},md={emerald:"border-emerald-400/30 bg-emerald-500/10 text-emerald-200",blue:"border-blue-400/30 bg-blue-500/10 text-blue-200",amber:"border-orange-400/30 bg-orange-500/10 text-orange-200",rose:"border-rose-400/30 bg-rose-500/10 text-rose-200",violet:"border-violet-400/30 bg-violet-500/10 text-violet-200",cyan:"border-cyan-400/30 bg-cyan-500/10 text-cyan-200",orange:"border-yellow-400/30 bg-yellow-500/10 text-yellow-200",sky:"border-sky-400/30 bg-sky-500/10 text-sky-200",pink:"border-pink-400/30 bg-pink-500/10 text-pink-200"},Hn={cash:"KESH",bank_transfer:"KARTELE BANKARE",credit_card:"KARTEL BANKARE",other:"VOUCHER",qek:"QEK",voucher:"VOUCHER"},Wn=Nl,pd={pharmacy:ds,medical_clinic:ds,retail_market:Hs,auto_mechanic:Vs,restaurant_cafe:xa,wholesale:go,services:fo,construction:xo,hotel_motel:bo,fuel_station:ho,taxi:Ls,general:po},hd=[{label:"Farmaci",value:"pharmacy",subtitle:"Për barnatore dhe depo farmaceutike"},{label:"Mjekë / Klinika",value:"medical_clinic",subtitle:"Për ordinanca, klinika dhe shërbime mjekësore"},{label:"Retail & Market",value:"retail_market",subtitle:"Për markete dhe dyqane me pakicë"},{label:"Restorant & Kafe",value:"restaurant_cafe",subtitle:"Për gastronomi dhe hoteleri"},{label:"Shërbime",value:"services",subtitle:"Për sallone dhe shërbime profesionale"},{label:"Ndërtim",value:"construction",subtitle:"Për depo ndërtimore dhe kompani ndërtimi"},{label:"Shumicë",value:"wholesale",subtitle:"Për biznese B2B dhe depo"}],Ve=t=>`€${t.toFixed(2)}`,hn=t=>t.price*(1+t.taxRate/100),bn=t=>{const r=Math.max(1,Number(t.quantity||1));return t.productDiscountAmount!=null?Math.max(0,hn(t)-Math.max(0,Number(t.productDiscountAmount)||0)*(1+t.taxRate/100)/r):hn(t)*(1-t.discountPercent/100)};function Ya({item:t,setCart:r,dark:n=!1}){const[a,l]=d.useState(!1),[o,m]=d.useState(t.productDiscountAmount!=null?"amount":"percent"),[u,s]=d.use
2State(""),j=N=>{N.stopPropagation();const O=t.productDiscountAmount!=null;m(O?"amount":"percent"),s(O?wr(t.productDiscountAmount||0):String(Number(t.discountPercent||0))),l(!0)},y=()=>l(!1),v=()=>{const N=Number(u.replace(",","."));if(!Number.isFinite(N)||N<0){f.error("Shkruaj një vlerë të vlefshme për zbritjen.");return}if(o==="percent"&&N>100){f.error("Zbritja në përqindje nuk mund të jetë mbi 100%.");return}if(o==="amount"){const O=Math.max(0,Number(t.price||0)*Math.max(0,Number(t.quantity||0)));if(N>O+5e-5){f.error(`Zbritja nuk mund të jetë më e madhe se €${O.toFixed(4)}.`);return}}r(O=>O.map(B=>B.id!==t.id?B:o==="percent"?{...B,discountPercent:N,discountPercentExact:He(u.replace(",","."),4),productDiscountAmount:void 0,productDiscountAmountExact:void 0}:{...B,discountPercent:0,discountPercentExact:"0.0000",productDiscountAmount:N,productDiscountAmountExact:He(u.replace(",","."),4)})),l(!1),f.success("Zbritja e artikullit u ruajt dhe do të llogaritet cent me cent.")},P=()=>{r(N=>N.map(O=>O.id===t.id?{...O,discountPercent:0,discountPercentExact:"0.0000",productDiscountAmount:void 0,productDiscountAmountExact:void 0}:O)),l(!1),f.success("Zbritja e artikullit u hoq.")};return e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:j,className:I("rounded-md border px-1.5 py-1 text-[9px] font-black transition",n?"border-white/10 bg-white/5 text-slate-300 hover:border-emerald-400/50 hover:text-white":"border-slate-200 bg-white text-slate-600 hover:border-blue-400 hover:text-blue-700"),"aria-label":`Vendos zbritje për ${t.name}`,children:"Zbritje"}),a&&e.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-slate-950/50 p-4",role:"presentation",onClick:y,children:e.jsxs("div",{role:"dialog","aria-modal":"true","aria-labelledby":`pos-item-discount-${t.id}`,className:"w-full max-w-sm rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-2xl",onClick:N=>N.stopPropagation(),children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{id:`pos-item-discount-${t.id}`,className:"text-sm font-black",children:"Zbritje për artikullin"}),e.jsx("p",{className:"mt-1 truncate text-xs text-slate-500",children:t.name})]}),e.jsx("button",{type:"button",onClick:y,className:"rounded-lg p-1 text-slate-400 hover:bg-slate-100 hover:text-slate-700","aria-label":"Mbyll zbritjen",children:e.jsx(Er,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"mt-4 grid grid-cols-2 gap-2",children:["percent","amount"].map(N=>e.jsx("button",{type:"button",onClick:()=>m(N),className:I("rounded-xl border px-3 py-2 text-xs font-black",o===N?"border-blue-600 bg-blue-600 text-white":"border-slate-200 bg-slate-50 text-slate-600 hover:border-blue-300"),children:N==="percent"?"Në %":"Në €"},N))}),e.jsx("label",{className:"mt-3 block text-xs font-bold text-slate-600",htmlFor:`pos-discount-${t.id}`,children:o==="percent"?"Përqindja e zbritjes":"Vlera e zbritjes (neto)"}),e.jsx(nt,{id:`pos-discount-${t.id}`,type:"number",min:"0",max:o==="percent"?100:void 0,step:"0.0001",inputMode:"decimal",value:u,onChange:N=>s(N.target.value),className:"mt-1 h-11 rounded-xl text-right font-bold",autoFocus:!0}),e.jsx("p",{className:"mt-2 text-[10px] text-slate-500",children:"Çmimi dhe totali i rreshtit do të ruhen me saktësi fiskale; totali i transmetuar në ATK mbetet në cent."}),e.jsxs("div",{className:"mt-4 flex justify-between gap-2",children:[e.jsx("button",{type:"button",onClick:P,className:"rounded-xl border border-rose-200 px-3 py-2 text-xs font-black text-rose-700 hover:bg-rose-50",children:"Hiq zbritjen"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"button",onClick:y,className:"rounded-xl border border-slate-200 px-3 py-2 text-xs font-black text-slate-600 hover:bg-slate-50",children:"Anulo"}),e.jsx("button",{type:"button",onClick:v,className:"rounded-xl bg-blue-600 px-3 py-2 text-xs font-black text-white hover:bg-blue-700",children:"Ruaj"})]})]})]})})]})}const bd=(t,r)=>Math.abs(r)<=.01?"exempt_with_credit":t.some(l=>Math.abs(l.taxRate-18)<.25)?"standard_18":t.some(l=>Math.abs(l.taxRate-8)<.25)?"reduced_8":"standard_18",Ui=(t,r,n)=>{const a=n??t.invoice_delivery_evidence,l=!["return","void","cancel"].includes(String(t.coupon_type||"").toLowerCase())&&Pl(a),o=["return","void","cancel"].includes(String(t.coupon_type||"").toLowerCase()),m=l||t.coupon_type==="total_discount"||o,u=Number(l?a?.posDiscount?.amount??t.discount_total??0:t.discount_total||0),s={id:t.id,companyId:t.company_id,invoiceId:t.invoice_id||void 0,businessUnitId:t.business_unit_id,operatorId:t.operator_id,couponNumber:t.coupon_number,documentNumber:Number(t.document_number||0),nuikf:t.nuikf,sefIdentifier:t.sef_identifier,couponType:t.coupon_type||"regular",status:t.status||"signed",atkStatus:t.atk_status||"pending",atkSubmissionStatus:t.atk_submission_status,atkEnvironment:t.atk_environment==="PROD"?"PROD":t.atk_environment==="TEST"?"TEST":void 0,atkTransactionId:t.atk_transaction_id_text||t.atk_transaction_id,atkQrPayload:t.atk_qr_payload,atkPayloadBase64:t.atk_payload_base64,atkSignatureBase64:t.atk_signature_base64,atkCouponId:t.atk_coupon_id==null?void 0:Number(t.atk_coupon_id),branchId:t.atk_branch_id??t.fiscal_business_units?.sef_branch_id??void 0,posId:t.atk_pos_id??t.fiscal_business_units?.sef_pos_id??void 0,applicationId:t.atk_application_id??void 0,fiscalDate:t.fiscal_date||void 0,fiscalTransactionId:t.fiscal_transaction_id||void 0,fiscalRegistrationId:t.fiscal_registration_id||void 0,fiscalIdentityVersion:t.fiscal_identity_version==null?void 0:Number(t.fiscal_identity_version),fiscalIdentitySnapshot:t.fiscal_identity_snapshot||void 0,referenceNo:t.reference_no==null?void 0:Number(t.reference_no),returnOriginalCouponNumber:t.return_original_coupon_number||void 0,returnOriginalCouponDate:t.return_original_coupon_date||void 0,returnRemainingTotal:t.return_remaining_total==null?void 0:Number(t.return_remaining_total),voidReason:t.void_reason||void 0,subtotal:Number(t.subtotal||0),discountTotal:Number(t.discount_total||0),subtotalDiscountTotal:m?u:void 0,vatTotal:Number(t.vat_total||0),grandTotal:Number(t.grand_total||0),paymentMethods:Bl({stored:t.payment_methods,deliveryEvidence:n,fallbackAmount:Number(t.grand_total||0)}),vatBreakdown:t.vat_breakdown||{},offlineMode:!!t.offline_mode,offlineReason:t.offline_reason||void 0,qrCodeUrl:t.qr_code_url||void 0,signature:t.signature||void 0,createdAt:t.created_at,transmittedAt:t.transmitted_at||void 0,items:Ul({fiscalItems:t.fiscal_coupon_items||[],invoiceItems:t.invoice_items||[],coupon:{grandTotal:Number(t.grand_total||0),vatTotal:Number(t.vat_total||0),subtotalDiscountTotal:m?u:void 0}}),businessUnitName:t.fiscal_business_units?.name||void 0,businessUnitCode:t.fiscal_business_units?.unit_code||void 0,businessUnitAddress:t.fiscal_business_units?.address||void 0,businessUnitCity:r?.city||void 0,businessUnitPhone:r?.phone||void 0,operatorName:t.fiscal_operators?.name||t.fiscal_operators?.operator_code||void 0,companyTatimpaguesi:r?.nui||r?.fiscal_number||void 0,companyTvshNumber:r?.tvsh_number||void 0,dailyCouponCounter:t.daily_coupon_counter==null?void 0:Number(t.daily_coupon_counter),isElectronic:!!t.is_electronic,businessId:r?.nui||void 0,taxiDriverName:t.taxi_driver_name||void 0,taxiVehiclePlate:t.taxi_vehicle_plate||t.fiscal_business_units?.vehicle_plate_number||void 0,taxiServiceType:t.taxi_service_type||void 0,taxiDepartureTime:t.taxi_departure_time||void 0,taxiArrivalTime:t.taxi_arrival_time||void 0,taxiDuration:t.taxi_duration==null?void 0:Number(t.taxi_duration),taxiKilometers:t.taxi_kilometers==null?void 0:Number(t.taxi_kilometers)},j=$l(s,n);return j.qrCodeUrl=Dr(j)||void 0,j};async function xd(t,r){if(!(typeof window>"u"||!window.electronAPI?.isElectron))try{const{data:n,error:a}=await ee.from("fiscal_coupons").select("*, fiscal_coupon_items(*), fiscal_business_units(name, address, unit_code, vehicle_plate_number, sef_branch_id, sef_pos_id), fiscal_operators(name, operator_code)").eq("company_id",t).in("coupon_type",["regular","item_discount","total_discount","fuel_pump","taxi"]).eq("atk_status","accepted").order("created_at",{ascending:!1}).limit(30);if(a)throw a;const l=Array.from(new Set((n||[]).map(u=>
2String(u.invoice_id||"")).filter(Boolean))),o=new Map;if(l.length>0){const{data:u,error:s}=await ee.from("invoices").select("id, delivery_evidence").eq("company_id",t).in("id",l);if(s)throw s;(u||[]).forEach(j=>{o.set(String(j.id),j.delivery_evidence)})}const m=(n||[]).map(u=>Ui({...u,invoice_delivery_evidence:o.get(String(u.invoice_id||""))},r));await qr(t,El,m)}catch(n){Nr(n)||console.warn("[POS] fiscal correction candidate cache deferred:",n)}}function fd(t){if(t&&typeof t=="object"){const r=t,n=typeof r.message=="string"?r.message:"",a=typeof r.details=="string"?r.details:"";return n==="Forbidden"||r.code==="42501"?"Roli i përdoruesit nuk ka leje për pagesë POS në këtë kompani. Kontrolloni membership-in dhe rolin e stafit.":n||a||"Gabim i panjohur gjatë ruajtjes së shitjes."}return t instanceof Error?t.message:"Gabim i panjohur gjatë ruajtjes së shitjes."}const gd=4e3;async function ca(t,r,n){let a;const l=new Promise(o=>{a=setTimeout(()=>{const m=new Error(`${n} query timed out`);console.warn(`[POS] ${n} loading deferred; catalogue remains available.`,m),o({data:r,error:m})},gd)});try{const o=await Promise.race([Promise.resolve(t).then(m=>({data:m?.data??r,error:m?.error??null})).catch(m=>(console.warn(`[POS] ${n} loading deferred; catalogue remains available.`,m),{data:r,error:m})),l]);return o.error&&o.data===r||o.error&&console.warn(`[POS] ${n} returned an error; catalogue remains available.`,o.error),o}finally{a&&clearTimeout(a)}}const Jt=t=>t.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"");function mn(t){const r=String(t||"").trim().toLowerCase();return["prod","production","live"].includes(r)?"PROD":"TEST"}const vd=()=>{const t=globalThis.crypto?.randomUUID?.();return t?`pos-${t}`:`pos-${Date.now()}-${Math.random().toString(36).slice(2,12)}`},qs="pos-fiscal-context";async function da(t,r){if(!t)return{};const n=r?.fallback||{},a=await Ta(t,qs).catch(()=>null),l=await _l(t).catch(()=>null),o={...a||{},...l||{}},m=await Sl(t).catch(()=>ci(t)),u=m?.businessUnitId||n.businessUnitId,s={...n,...o};if(n.businessUnitId&&o.businessUnitId!==n.businessUnitId&&Object.assign(s,{businessUnitId:n.businessUnitId,operatorId:n.operatorId,operatorName:n.operatorName,branchId:n.branchId,posId:n.posId,sefId:n.sefId}),m&&Object.assign(s,{businessUnitId:m.businessUnitId,branchId:m.branchId||s.branchId,posId:m.posId||s.posId,sefId:m.sefId||s.sefId}),r?.allowRemote===!1)return s;try{const{data:v}=await ee.from("companies").select("fiscal_environment,nui,sef_nui_numeric,sef_application_id,sef_branch_id,sef_default_pos_id,sef_fiscalization_no").eq("id",t).maybeSingle();v&&(s.environment=mn(v.fiscal_environment),s.businessNui=Number(v.sef_nui_numeric||v.nui||s.businessNui||0)||void 0,s.applicationId=Number(v.sef_application_id||s.applicationId||0)||void 0,s.sefId=String(v.sef_fiscalization_no||s.sefId||"").trim()||void 0)}catch{}const{data:j}=await ee.auth.getSession(),y=j.session?.user?.id;if(!y)return s;try{const{data:v,error:P}=await ee.rpc(u?"get_or_create_pos_fiscal_context_for_unit":"get_or_create_pos_fiscal_context",u?{p_company_id:t,p_user_id:y,p_business_unit_id:u}:{p_company_id:t,p_user_id:y});if(P||!v)return s;const N={...s,businessUnitId:String(v.business_unit_id||v.businessUnitId||"")||void 0,operatorId:String(v.operator_id||v.operatorId||"")||void 0,businessNui:Number(v.business_nui||v.businessNui||s.businessNui||0)||void 0,operatorName:String(v.operator_name||v.operatorName||s.operatorName||"")||void 0,branchId:Number(v.branch_id||v.branchId||s.branchId||0)||void 0,posId:Number(v.pos_id||v.posId||s.posId||0)||void 0,applicationId:Number(v.application_id||v.applicationId||s.applicationId||0)||void 0,sefId:String(v.sef_identifier||v.sefIdentifier||v.sef_fiscalization_no||s.sefId||"").trim()||void 0,businessUnitCode:String(v.unit_code||v.business_unit_code||s.businessUnitCode||"").trim()||void 0,environment:s.environment||mn(v.environment)};try{if(N.businessUnitId){const{data:O}=await ee.from("fiscal_business_units").select("sef_fiscalization_no,unit_code").eq("id",N.businessUnitId).eq("company_id",t).maybeSingle(),{data:B}=await ee.from("fiscalization_pos_registrations").select("application_id,fiscalization_no").eq("tenant_id",t).eq("branch_id",N.branchId||0).eq("pos_id",N.posId||0).eq("environment",N.environment||"TEST").is("disabled_at",null).order("created_at",{ascending:!1}).limit(1).maybeSingle();N.sefId=String(O?.sef_fiscalization_no||B?.fiscalization_no||N.sefId||"").trim()||void 0,N.businessUnitCode=String(O?.unit_code||N.businessUnitCode||"").trim()||void 0,N.applicationId=Number(B?.application_id||N.applicationId||0)||void 0}}catch{}return await qr(t,qs,N),N}catch{return s}}const jd=[{id:"T1",seats:4,zone:"Brenda",status:"free"},{id:"T2",seats:4,zone:"Brenda",status:"occupied",total:32.5,time:"25:40"},{id:"T3",seats:4,zone:"Brenda",status:"free"},{id:"T4",seats:6,zone:"Brenda",status:"occupied",total:56,time:"15:10"},{id:"T5",seats:2,zone:"Brenda",status:"free"},{id:"T6",seats:4,zone:"Brenda",status:"occupied",total:78,time:"45:20"},{id:"T7",seats:4,zone:"Brenda",status:"free"},{id:"T8",seats:4,zone:"Brenda",status:"reserved",time:"19:00"},{id:"T9",seats:2,zone:"Brenda",status:"free"},{id:"T10",seats:6,zone:"Brenda",status:"free"},{id:"T11",seats:2,zone:"Tarraca",status:"free"},{id:"T12",seats:4,zone:"Tarraca",status:"occupied",total:24,time:"12:05"},{id:"T13",seats:4,zone:"Tarraca",status:"free"},{id:"T14",seats:4,zone:"Tarraca",status:"cleaning"},{id:"T15",seats:4,zone:"Tarraca",status:"reserved",time:"20:30"},{id:"V1",seats:6,zone:"VIP",status:"occupied",total:92.5,time:"35:15"},{id:"V2",seats:8,zone:"VIP",status:"free"},{id:"V3",seats:8,zone:"VIP",status:"reserved",time:"21:00"},{id:"V4",seats:6,zone:"VIP",status:"free"},{id:"V5",seats:10,zone:"VIP",status:"free"}],Ks={free:"border-emerald-400/45 bg-[linear-gradient(145deg,#276749,#17452f)] shadow-emerald-950/40",occupied:"border-orange-400/55 bg-[linear-gradient(145deg,#b45309,#7c2d12)] shadow-orange-950/40",reserved:"border-violet-400/55 bg-[linear-gradient(145deg,#6d3aa7,#422066)] shadow-violet-950/40",cleaning:"border-slate-400/45 bg-[linear-gradient(145deg,#475569,#273244)] shadow-slate-950/40"},yd=t=>{const r=Jt(t);return r.includes("espresso")||r.includes("kafe")?"☕":r.includes("capp")||r.includes("latte")||r.includes("macchi")?"🥛":r.includes("uje")?"💧":r.includes("limon")?"🍋":r.includes("cola")?"🥤":r.includes("pizza")?"🍕":r.includes("sandwich")?"🥪":r.includes("salad")?"🥗":r.includes("burger")||r.includes("hamb")?"🍔":r.includes("embel")||r.includes("cake")?"🍰":"🍽️"};function Ja({businessName:t,logoUrl:r,dark:n=!1,compact:a=!1}){const[l,o]=d.useState(!1);d.useEffect(()=>o(!1),[r]);const m=String(t||"FaturaPro").trim()||"FaturaPro",u=m.split(/\s+/).filter(
2Boolean).slice(0,2).map(s=>s[0]?.toUpperCase()||"").join("")||"FP";return e.jsxs("div",{className:I("flex min-w-0 items-center",a?"gap-2":"gap-3"),children:[e.jsx("div",{className:I("flex shrink-0 items-center justify-center overflow-hidden rounded-xl border",a?"h-9 w-9":"h-11 w-11",n?"border-white/15 bg-white":"border-border/60 bg-card"),children:r&&!l?e.jsx("img",{src:r,alt:`Logo ${m}`,className:"h-full w-full object-contain p-1",loading:"eager",decoding:"async",onError:()=>o(!0)}):l&&r?e.jsx("span",{className:I("text-xs font-black",n?"text-slate-800":"text-primary"),children:u}):e.jsx(Il,{size:"sm",showText:!1,className:"scale-75"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:I("truncate font-black tracking-tight",a?"text-sm":"text-base",n?"text-white":"text-foreground"),children:m}),!a&&e.jsx("div",{className:I("truncate text-[10px] font-bold uppercase tracking-wider",n?"text-slate-300":"text-muted-foreground"),children:"FaturaPro POS"})]})]})}function Bi({percent:t,setPercent:r,amount:n,setAmount:a,dark:l=!1}){const o=I("h-10 w-full rounded-lg border px-3 text-sm",l?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white"),m=li(),u=d.useRef(null),s=d.useRef(null),j=P=>{const N=P.replace(",",".").trim();if(!N)return 0;const O=Number(N);return Number.isFinite(O)?Math.max(0,O):0};d.useEffect(()=>{m&&(u.current&&document.activeElement!==u.current&&(u.current.value=t?String(t):""),s.current&&document.activeElement!==s.current&&(s.current.value=n?String(n):""))},[n,t,m]);const y=()=>{u.current&&(u.current.value=t?String(t):"")},v=()=>{s.current&&(s.current.value=n?String(n):"")};return e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("label",{className:"block space-y-1",children:[e.jsx("span",{className:"text-xs font-bold",children:"Zbritje në nëntotal neto (%)"}),m?e.jsx("input",{ref:u,type:"text",inputMode:"decimal",defaultValue:t||"",onChange:P=>{a(0),s.current&&(s.current.value=""),r(Math.min(100,j(P.currentTarget.value)))},onBlur:y,placeholder:"0","aria-label":"Zbritje në nëntotal në përqindje",className:o}):e.jsx("input",{type:"number",min:"0",max:"100",step:"0.0001",inputMode:"decimal",value:t||"",onChange:P=>{a(0),r(Math.min(100,j(P.currentTarget.value)))},placeholder:"0","aria-label":"Zbritje në nëntotal në përqindje",className:o})]}),e.jsxs("label",{className:"block space-y-1",children:[e.jsx("span",{className:"text-xs font-bold",children:"Zbritje fikse në nëntotal neto (€)"}),m?e.jsx("input",{ref:s,type:"text",inputMode:"decimal",defaultValue:n||"",onChange:P=>{r(0),u.current&&(u.current.value=""),a(j(P.currentTarget.value))},onBlur:v,placeholder:"0.00","aria-label":"Zbritje fikse në nëntotal në euro",className:o}):e.jsx("input",{type:"number",min:"0",step:"0.0001",inputMode:"decimal",value:n||"",onChange:P=>{r(0),a(j(P.currentTarget.value))},placeholder:"0.00","aria-label":"Zbritje fikse në nëntotal në euro",className:o})]})]})}function es({choice:t,setChoice:r,email:n,setEmail:a,consent:l,setConsent:o,dark:m=!1}){const u=m?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white text-slate-800",s=m?"text-slate-300":"text-slate-600";return e.jsxs("div",{className:I("space-y-2 rounded-xl border p-3",m?"border-white/10 bg-white/5":"border-slate-200 bg-slate-50"),children:[e.jsx("div",{className:I("text-[10px] font-black uppercase tracking-wider",s),children:"Dorëzimi i kuponit fiskal"}),e.jsxs("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-3",children:[e.jsxs("button",{type:"button",onClick:()=>{r("paper"),o(!1)},className:I("flex min-h-10 items-center justify-center gap-1.5 rounded-lg border px-2 text-[10px] font-black transition",t==="paper"?"border-emerald-500 bg-emerald-500 text-white":I(u,"hover:border-emerald-400")),children:[e.jsx(Mn,{className:"h-3.5 w-3.5"})," Me letër"]}),e.jsxs("button",{type:"button",onClick:()=>r("without_paper"),className:I("flex min-h-10 items-center justify-center gap-1.5 rounded-lg border px-2 text-[10px] font-black transition",t==="without_paper"?"border-blue-500 bg-blue-600 text-white":I(u,"hover:border-blue-400")),children:[e.jsx(ga,{className:"h-3.5 w-3.5"})," Paguaj pa letër"]}),e.jsxs("button",{type:"button",onClick:()=>r("email"),className:I("flex min-h-10 items-center justify-center gap-1.5 rounded-lg border px-2 text-[10px] font-black transition",t==="email"?"border-violet-500 bg-violet-600 text-white":I(u,"hover:border-violet-400")),children:[e.jsx(_o,{className:"h-3.5 w-3.5"})," Paguaj & dërgo email"]})]}),t!=="paper"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:I("flex items-start gap-2 text-[11px]",s),children:[e.jsx("input",{type:"checkbox",checked:l,onChange:j=>
2o(j.currentTarget.checked),className:"mt-0.5 h-4 w-4 rounded border-slate-300 accent-blue-600"}),e.jsx("span",{children:"Klienti pajtohet që kuponi fiskal të dorëzohet në mënyrë elektronike."})]}),t==="email"&&e.jsx("input",{type:"email",value:n,onChange:j=>a(j.currentTarget.value),placeholder:"Email-i i klientit",autoComplete:"email",className:I("h-10 w-full rounded-lg border px-3 text-sm outline-none focus:border-violet-400",u),"aria-label":"Email-i i klientit për kuponin fiskal"}),t==="without_paper"&&e.jsx("p",{className:I("text-[10px]",s),children:"Kuponi do të ruhet si PDF elektronik dhe nuk do t’i dërgohet printerit."})]})]})}function $i({total:t,paymentMethod:r,setPaymentMethod:n,checkoutMode:a,setCheckoutMode:l,isSplitPayment:o,setIsSplitPayment:m,splitPayments:u,setSplitPayments:s,cashReceived:j,setCashReceived:y,clients:v,selectedClientId:P,setSelectedClientId:N,dark:O=!1,paymentRail:B=!1,hideQuickPaymentButtons:$=!1,manualDiscountPercent:b,setManualDiscountPercent:Y,manualDiscountAmount:ce,setManualDiscountAmount:k,deliveryChoice:Q,setDeliveryChoice:Ke,deliveryEmail:We,setDeliveryEmail:Fe,electronicReceiptConsent:w,setElectronicReceiptConsent:J}){const je=de=>{l("paid"),m(!1),n(de)},Ge=()=>{l("paid"),m(!0),s(Ba(t))},Se=o?u.filter(de=>de.method==="cash").reduce((de,ae)=>de+(Number(ae.amount)||0),0):r==="cash"&&a==="paid"?t:0,Tt=u.reduce((de,ae)=>de+(Number(ae.amount)||0),0),et=t-Tt;return e.jsxs("div",{className:"space-y-3",children:[e.jsx(Bi,{percent:b,setPercent:Y,amount:ce,setAmount:k,dark:O}),e.jsxs("label",{className:"block space-y-1",children:[e.jsx("span",{className:"text-xs font-bold",children:"Klienti"}),e.jsxs("select",{value:P,onChange:de=>N(de.target.value),className:I("h-10 w-full rounded-lg border px-3 text-sm",O?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white"),children:[e.jsx("option",{value:"walk-in",children:"Klient i rastit"}),v.map(de=>e.jsx("option",{value:de.id,children:de.name},de.id))]})]}),e.jsx(es,{choice:Q,setChoice:Ke,email:We,setEmail:Fe,consent:w,setConsent:J,dark:O}),!$&&e.jsxs("div",{className:I("grid grid-cols-2 gap-2",!B&&"sm:grid-cols-4"),children:[e.jsx("button",{type:"button",onClick:()=>je("cash"),className:I("min-h-[72px] rounded-xl px-2 py-3 text-[11px] font-bold text-white shadow-sm transition-transform hover:-translate-y-0.5",!o&&a==="paid"&&r==="cash"?"ring-2 ring-white ring-offset-2 ring-offset-transparent bg-emerald-600":"bg-emerald-500"),children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1.5 leading-tight",children:[e.jsx(Rn,{className:"h-4 w-4"}),e.jsx("span",{children:"KESH"})]})}),e.jsx("button",{type:"button",onClick:()=>je("credit_card"),className:I("min-h-[72px] rounded-xl px-2 py-3 text-[11px] font-bold text-white shadow-sm transition-transform hover:-translate-y-0.5",!o&&a==="paid"&&r==="credit_card"?"ring-2 ring-white ring-offset-2 ring-offset-transparent bg-blue-700":"bg-blue-600"),children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1.5 leading-tight",children:[e.jsx(Gs,{className:"h-4 w-4"}),e.jsx("span",{children:"KARTEL BANKARE"})]})}),e.jsx("button",{type:"button",onClick:()=>je("qek"),className:I("min-h-[72px] rounded-xl px-2 py-3 text-[11px] font-bold text-white shadow-sm transition-transform hover:-translate-y-0.5",!o&&a==="paid"&&r==="qek"?"ring-2 ring-white ring-offset-2 ring-offset-transparent bg-violet-700":"bg-violet-600"),children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1.5 leading-tight",children:[e.jsx($r,{className:"h-4 w-4"}),e.jsx("span",{children:"QEK"})]})}),e.jsx("button",{type:"button",onClick:()=>je("voucher"),className:I("min-h-[72px] rounded-xl px-2 py-3 text-[11px] font-bold text-white shadow-sm transition-transform hover:-translate-y-0.5",!o&&a==="paid"&&r==="voucher"?"ring-2 ring-white ring-offset-2 ring-offset-transparent bg-orange-700":"bg-orange-500"),children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1.5 leading-tight",children:[e.jsx($r,{className:"h-4 w-4"}),e.jsx("span",{children:"VOUCHER"})]})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx("button",{type:"button",onClick:Ge,className:I("rounded-xl border px-2 py-2 text-xs font-bold",o?"border-violet-500 bg-violet-100 text-violet-700":"border-slate-200 bg-slate-50 text-slate-600"),children:"Pagesë e kombinuar"}),e.jsx("button",{type:"button",onClick:()=>{l("pending"),m(!1)},className:I("rounded-xl border px-2 py-2 text-xs font-bold",a==="pending"?"border-orange-500 bg-orange-100 text-orange-700":"border-slate-200 bg-slate-50 text-slate-600"),children:"Ruaj si borxh"})]}),o&&a==="paid"&&e.jsxs("div",{className:I("space-y-2 rounded-xl border p-3",O?"border-white/10 bg-white/5":"border-slate-200 bg-slate-50"),children:[u.map((de,ae)=>e.jsxs("div",{className:"grid grid-cols-[1fr_110px_32px] gap-2",children:[e.jsx("select",{value:de.method,onChange:ze=>s(Z=>Z.map((Re,E)=>E===ae?{...Re,method:ze.target.value}:Re)),className:I("h-10 rounded-lg border px-2 text-sm",O?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white"),children:Wn.map(ze=>e.jsx("option",{value:ze,children:Hn[ze]},ze))}),e.jsx("input",{type:"number",min:"0",step:"0.01",inputMode:"decimal",value:de.amount,onChange:ze=>s(Z=>Z.map((Re,E)=>E===ae?{...Re,amount:ze.target.value}:Re)),className:I("h-10 rounded-lg border px-2 text-right text-sm",O?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white")}),e.jsx("button",{type:"button",onClick:()=>s(ze=>ze.filter((Z,Re)=>Re!==ae)),disabled:u.length<=2,className:"h-10 rounded-lg border border-rose-400/30 text-rose-500 disabled:opacity-30","aria-label":"Hiq metodën e pagesës",children:"×"})]},`${de.method}-${ae}`)),e.jsxs("div",{className:"flex items-center justify-between gap-3 text-xs",children:[e.jsx("button",{type:"button",onClick:()=>s(de=>[...de,{method:"voucher",amount:et>0?et.toFixed(2):""}]),className:"font-bold text-blue-500",children:"+ Shto metodë"}),e.jsx("span",{className:Math.abs(et)<.01?"text-emerald-500":"text-amber-500",children:Math.abs(et)<.01?"✓ Balancuar":`Mbetet ${Ve(et)}`})]})]}),Se>0&&e.jsxs("div",{className:I("rounded-xl border p-3",O?"border-white/10 bg-white/5":"border-slate-200 bg-slate-50"),children:[e.jsxs("div",{className:"mb-2 flex justify-between text-xs",children:[e.jsx("span",{children:"Cash i pranuar"}),e.jsxs("span",{children:["Kërkohet ",Ve(Se)]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"number",min:"0",step:"0.01",inputMode:"decimal",value:j,onChange:de=>y(de.target.value),placeholder:Se.toFixed(2),className:I("h-10 min-w-0 flex-1 rounded-lg border px-3 text-right",O?"border-white/10 bg-[#111c29] text-white":"border-slate-200 bg-white")}),e.jsx("button",{type:"button",onClick:()=>y(Se.toFixed(2)),className:"rounded-lg border px-3 text-xs font-bold",children:"E saktë"})]}),Number(j)>0&&e.jsx("div",{className:I("mt-2 text-right text-xs font-bold",Number(j)+.01<Se?"text-rose-500":"text-emerald-500"),children:Number(j)+.01<Se?`Mungon ${Ve(Se-Number(j))}`:`Kusuri ${Ve(Math.max(0,Number(j)-Se))}`})]})]})}const kd={emerald:"bg-emerald-50 text-emerald-600 ring-emerald-100",blue:"bg-blue-50 text-blue-600 ring-blue-100",amber:"bg-amber-50 text-amber-600 ring-amber-100",rose:"bg-rose-50 text-rose-600 ring-rose-100",violet:"bg-violet-50 text-violet-600 ring-violet-100",cyan:"bg-cyan-50 text-cyan-600 ring-cyan-100",orange:"bg-orange-50 text-orange-600 ring-orange-100",sky:"bg-sky-50 text-sky-600 ring-sky-100",pink:"bg-pink-50 text-pink-600 ring-pink-100"},Nd=t=>{const r=Jt(`${t.name} ${t.description}`);return r.includes("qumesht")||r.includes("milk")?So:r.includes("buke")||r.includes("bukë")||r.includes("croissant")?Co:r.includes("vaj")||r.includes("oil")?Po:r.includes("kafe")||r.includes("coffee")?To:r.includes("uje")||r.includes("water")?Io:r.includes("cola")||r.includes("pepsi")||r.includes("fanta")||r.includes("pije")?Do:r.includes("sheqer")||r.includes("sugar")||r.includes("embel")?Ao:r.includes("mish")||r.includes("sallam")||r.includes("beef")?Eo:r.includes("frut")||r.includes("molle")||r.includes("apple")?Ro:r.includes("perime")||r.includes("carrot")?Oo:r.includes("sallat")||r.includes("salad")?Fo:r.includes("pastr")||r.includes("deterg")||r.includes("spray")?Mo:r.includes("grure")||r.includes("wheat")?qo:r.includes("kuzhin")||r.includes("chef")?Ko:Qs};function wd({item:t,compact:r=!1}){const n=Nd(t);return e.jsxs("div",{className:I("retail-market-product-art relative flex shrink-0 items-center justify-center overflow-hidden rounded-xl ring-1",r?"h-12 w-12":"h-[4.4rem] w-full",kd[t.accent]),"aria-hidden":"true",children:[e.jsx("span",{className:"absolute -right-3 -top-5 h-16 w-16 rounded-full bg-white/60"}),e.jsx("span",{className:"absolute -bottom-5 -left-4 h-14 w-14 roun
2ded-full bg-white/45"}),e.jsx(n,{className:I("relative drop-shadow-sm",r?"h-7 w-7":"h-10 w-10"),strokeWidth:1.65})]})}function _d({businessName:t,logoUrl:r,companyId:n,nextInvoiceNumber:a,posFiscalUnitSelector:l,posStatus:o,pendingCount:m,isRestrictedRole:u,search:s,setSearch:j,activeTab:y,setActiveTab:v,productTabs:P,filteredCatalog:N,isLoading:O,cart:B,setCart:$,addToCart:b,totals:Y,heldCart:ce,holdOrRestoreCart:k,clearCart:Q,isCheckoutInFlight:Ke,onCheckout:We,paymentMethod:Fe,setPaymentMethod:w,checkoutMode:J,setCheckoutMode:je,isSplitPayment:Ge,setIsSplitPayment:Se,splitPayments:Tt,setSplitPayments:et,cashReceived:de,setCashReceived:ae,clients:ze,selectedClientId:Z,setSelectedClientId:Re,manualDiscountPercent:E,setManualDiscountPercent:at,manualDiscountAmount:gt,setManualDiscountAmount:er,deliveryChoice:fr,setDeliveryChoice:Qe,deliveryEmail:Xe,setDeliveryEmail:tr,electronicReceiptConsent:rr,setElectronicReceiptConsent:gr,invoiceNotes:F,setInvoiceNotes:Et,onOpenClient:pt,onOpenScanner:It,onSetReturnDialogMode:nr}){const pe=qa(),Ce=d.useRef(null),[Pe,Rt]=d.useState("products"),[vt,jt]=d.useState("grid"),[_t,Ot]=d.useState(()=>new Set),[V,yt]=d.useState(B[0]?.id||null),[he,Kt]=d.useState(!1),[tt,St]=d.useState(!1),[Gt,ar]=d.useState("1.00"),[ht,Le]=d.useState(!1);d.useEffect(()=>{V&&B.some(g=>g.id===V)||yt(B[0]?.id||null)},[B,V]),d.useEffect(()=>{const g=G=>{G.key==="F2"&&(G.preventDefault(),Ce.current?.focus(),Ce.current?.select())};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[]);const se=d.useMemo(()=>Pe==="favorites"?N.filter(g=>_t.has(g.id)):N,[Pe,_t,N]),H=g=>{je("paid"),Se(!1),w(g)},bt=()=>{je("paid"),Se(!0),et(Ba(Y.total)),Kt(!0)},Te=()=>{je("pending"),Se(!1)},Ct=()=>{if(!V){f.info("Zgjidh një artikull në faturë për të ndryshuar sasinë.");return}$(g=>g.map(G=>G.id===V?{...G,quantity:G.quantity+1,quantityExact:He(String(G.quantity+1),4)}:G)),f.success("Sasia u rrit me 1.")},ye=()=>{const g=B.find(Be=>Be.id===V);if(!g){f.info("Zgjidh një artikull në faturë për të ndryshuar çmimin.");return}const G=window.prompt(`Çmimi i ri për ${g.name}`,wr(g.price));if(G===null)return;let ie;try{ie=He(G.replace(",","."),4)}catch{f.error("Shkruaj një çmim të vlefshëm me maksimumi 4 shifra dhjetore.");return}const Me=Number(ie);if(!Number.isFinite(Me)||Me<0){f.error("Shkruaj një çmim të vlefshëm.");return}$(Be=>Be.map(st=>st.id===g.id?{...st,price:Me,fiscalPrice:ie}:st)),f.success("Çmimi u përditësua për këtë faturë.")},sr=()=>{const g=B.find(G=>G.id===V);if(!g){f.info("Zgjidh një artikull në faturë për të vendosur peshën/sasinë.");return}ar(Lr(g.quantity)),St(!0)},kt=()=>{const g=B.find(ie=>ie.id===V);if(!g){St(!1);return}const G=Number(Gt.replace(",","."));if(!Number.isFinite(G)||G<=0){f.error("Shkruaj një peshë/sasi më të madhe se zero.");return}if(g.stockTracked===!0&&g.stockQuantity!=null&&G>g.stockQuantity+Number.EPSILON){f.error(`Produkti "${g.name}" nuk ka stok të mjaftueshëm. Gjendja: ${g.stockQuantity}.`);return}$(ie=>ie.map(Me=>Me.id===g.id?{...Me,quantity:G,quantityExact:He(Gt.replace(",","."),4)}:Me)),St(!1),f.success(`Sasia u vendos në ${Lr(G)}.`)},h=g=>{Ot(G=>{const ie=new Set(G);return ie.has(g)?ie.delete(g):ie.add(g),ie})},z=g=>{document.querySelector(g)?.scrollIntoView({behavior:"smooth",block:"start"})},L=new Date().toLocaleDateString("sq-AL",{day:"2-digit",month:"2-digit",year:"numeric"}),A=new Date().toLocaleTimeString("sq-AL",{hour:"2-digit",minute:"2-digit"});return e.jsxs("div",{"data-pos-design":"retail-workspace","data-fiscal-engine":fn,className:"pos-market-workspace retail-market-shell min-h-dvh min-w-0 overflow-x-hidden bg-[#eef2f7] text-slate-800 selection:bg-blue-100",children:[e.jsx("header",{className:"retail-market-topbar sticky top-0 z-40 border-b border-white/10 bg-[#111f34] text-white shadow-[0_10px_30px_rgba(7,20,39,.16)]",children:e.jsxs("div",{className:"retail-market-topbar-inner flex min-w-0 items-center gap-2 px-3 sm:gap-3 sm:px-5",children:[e.jsx("button",{type:"button",onClick:()=>pe("/dashboard"),className:"retail-market-menu-button rounded-lg p-2 text-slate-200 transition hover:bg-white/10 lg:hidden","aria-label":"Hap menunë",children:e.jsx(Fn,{className:"h-5 w-5"})}),e.jsxs("div",{className:"retail-market-brand flex min-w-0 shrink-0 items-center gap-2",children:[e.jsx(Ja,{businessName:t,logoUrl:r,dark:!0,compact:!0}),e.jsx("span",{className:"rounded-md bg-blue-500/20 px-2 py-1 text-[10px] font-black uppercase tracking-[0.14em] text-blue-100",children:"POS"})]}),e.jsxs("div",{className:"retail-market-search relative ml-1 flex min-w-0 flex-1 items-center gap-2 rounded-lg border border-white/15 bg-white shadow-sm lg:ml-4",children:[e.jsx("span",{className:"hidden shrink-0 items-center gap-1 rounded-md bg-slate-100 px-2 py-1 text-[10px] font-black text-slate-500 sm:inline-flex",children:"F2"}),e.jsx(Ur,{className:"ml-2 h-4 w-4 shrink-0 text-slate-400 sm:ml-0"}),e.jsx(nt,{ref:Ce,value:s,onChange:g=>j(g.target.value),placeholder:"Kërko produkt (emër, barcode, PLU)",className:"h-9 min-w-0 flex-1 border-0 bg-transparent px-1 text-sm text-slate-800 shadow-none focus-visible:ring-0","aria-label":"Kërko produkt"}),e.jsx("button",{type:"button",onClick:It,className:"mr-1 rounded-md p-1.5 text-slate-500 transition hover:bg-slate-100 hover:text-blue-600","aria-label":"Skano barkod",children:e.jsx(ba,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"retail-market-topbar-actions flex shrink-0 items-center gap-2",children:[e.jsxs("button",{type:"button",onClick:pt,className:"hidden items-center gap-2 rounded-lg border border-white/20 px-3 py-2 text-xs font-bold transition hover:bg-white/10 xl:flex",children:[e.jsx($s,{className:"h-4 w-4"})," Klient"]}),e.jsxs("button",{type:"button",onClick:k,className:"hidden items-center gap-2 rounded-lg border border-white/20 px-3 py-2 text-xs font-bold transition hover:bg-white/10 lg:flex",children:[e.jsx(ga,{className:"h-4 w-4"}),B.length?"Hold":ce.length?"Riktheje":"Hold"]}),e.jsx("div",{className:"retail-market-fiscal-status hidden items-center gap-2 xl:flex",children:e.jsx(Zn,{status:o,pendingCount:m,compact:!0})}),l||e.jsxs("div",{className:"retail-market-store hidden items-center gap-2 rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-xs font-bold lg:flex",children:[e.jsx(Hs,{className:"h-4 w-4 text-blue-200"}),e.jsx("span",{className:"max-w-[8rem] truncate",children:"Market Qendra"}),e.jsx(La,{className:"h-3.5 w-3.5 rotate-90 text-slate-400"})]}),e.jsxs("div",{className:"retail-market-clock hidden items-center gap-2 border-l border-white/15 pl-3 2xl:flex",children:[e.jsxs("div",{className:"text-right leading-tight",children:[e.jsx("div",{className:"text-sm font-black tabular-nums",children:A}),e.jsx("div",{className:"text-[10px] font-semibold text-slate-400",children:L})]}),e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-violet-500/80 text-[10px] font-black text-white",children:"FP"})]}),e.jsx("button",{type:"button",onClick:()=>
2pe("/dashboard"),className:"rounded-lg p-2 text-slate-300 transition hover:bg-white/10 hover:text-white","aria-label":"Kthehu në panel",children:e.jsx(Fn,{className:"h-5 w-5"})})]})]})}),e.jsxs("main",{className:"retail-market-body min-w-0",children:[e.jsxs("section",{id:"retail-market-checkout","data-pos-region":"retail-checkout",className:"retail-market-checkout min-w-0 bg-white",children:[e.jsxs("div",{className:"retail-market-ticket-head flex items-start justify-between gap-3 bg-[linear-gradient(120deg,#14253d,#1c3555)] px-4 py-3 text-white sm:px-5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx($r,{className:"h-4 w-4 text-blue-200"}),e.jsxs("div",{className:"truncate text-sm font-black tracking-tight",children:["Fatura #",a||"POS-2025-0001"]}),e.jsx("span",{className:"rounded-md bg-blue-400/20 px-2 py-0.5 text-[10px] font-bold text-blue-100",children:"Shitje"})]}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] font-medium text-slate-300",children:[e.jsx("span",{children:"Arka: ARKA 1"}),e.jsx("span",{className:"hidden text-slate-500 sm:inline",children:"•"}),e.jsx("span",{children:"Operatori: Sesioni aktiv"})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>nr("return"),disabled:u||!n,className:"flex items-center gap-1.5 rounded-lg border border-rose-300/60 px-2.5 py-2 text-[11px] font-black text-rose-100 transition hover:bg-rose-500/15 disabled:cursor-not-allowed disabled:opacity-40 sm:px-3",children:[e.jsx(Ws,{className:"h-3.5 w-3.5"}),e.jsx("span",{className:"hidden sm:inline",children:"Kthim artikulli"}),e.jsx("span",{className:"sm:hidden",children:"Kthim"})]}),e.jsx("button",{type:"button",onClick:()=>nr("void"),className:"rounded-lg border border-white/15 p-2 text-slate-300 transition hover:bg-white/10 hover:text-white","aria-label":"Anulo faturën",children:e.jsx(jo,{className:"h-4 w-4"})})]})]}),e.jsx("div",{className:"retail-market-cart-wrap min-h-0 flex-1 overflow-auto",children:e.jsxs("div",{className:"retail-market-cart-table min-w-[600px]",children:[e.jsxs("div",{className:"retail-market-cart-heading grid grid-cols-[32px_112px_minmax(180px,1fr)_92px_78px_70px_84px_36px] items-center gap-2 border-b border-slate-200 bg-slate-50 px-4 py-2 text-[10px] font-black uppercase tracking-[0.08em] text-slate-500",children:[e.jsx("span",{children:"#"}),e.jsx("span",{children:"Barkod"}),e.jsx("span",{children:"Emri i produktit"}),e.jsx("span",{className:"text-center",children:"Sasia"}),e.jsx("span",{className:"text-right",children:"Çmimi"}),e.jsx("span",{className:"text-right",children:"Zbritje"}),e.jsx("span",{className:"text-right",children:"Total"}),e.jsx("span",{})]}),B.length===0?e.jsxs("div",{className:"retail-market-empty-cart flex min-h-[17rem] flex-col items-center justify-center gap-3 px-6 text-center text-slate-400",children:[e.jsx("div",{className:"flex h-14 w-14 items-center justify-center rounded-2xl bg-slate-100 text-slate-300",children:e.jsx(pn,{className:"h-7 w-7"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-black text-slate-600",children:"Fatura është bosh"}),e.jsx("p",{className:"mt-1 text-xs text-slate-400",children:"Shto artikuj nga katalogu ose skano barkodin."})]}),e.jsx("button",{type:"button",onClick:()=>z("#retail-market-catalog"),className:"rounded-lg border border-blue-200 bg-blue-50 px-3 py-2 text-xs font-black text-blue-700 transition hover:bg-blue-100",children:"Hap katalogun"})]}):B.map((g,G)=>{const ie=Y.lines[G],Me=ie?.grossUnitPriceAfterProductDiscount??bn(g),Be=ie?.grossDiscountTotal||0,st=V===g.id;return e.jsxs("div",{onClick:()=>yt(g.id),className:I("retail-market-cart-row grid grid-cols-[32px_112px_minmax(180px,1fr)_92px_78px_70px_84px_36px] items-center gap-2 border-b border-slate-100 px-4 py-3 text-xs transition hover:bg-blue-50/60",st&&"bg-blue-50/80"),children:[e.jsx("span",{className:"font-bold text-slate-400",children:G+1}),e.jsx("span",{className:"truncate font-mono text-[10px] text-slate-500",children:g.barcode||"—"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate font-black text-slate-800",children:g.name}),e.jsx("div",{className:"mt-0.5 truncate text-[10px] text-slate-400",children:g.description})]}),e.jsxs("div",{className:"mx-auto flex items-center rounded-lg border border-slate-200 bg-white shadow-sm",children:[e.jsx("button",{type:"button",onClick:ke=>{ke.stopPropagation(),$(it=>it.map(ue=>ue.id===g.id?{...ue,quantity:Math.max(1,ue.quantity-1),quantityExact:He(String(Math.max(1,ue.quantity-1)),4)}:ue))},className:"px-1.5 py-1.5 text-slate-500 transition hover:text-blue-600","aria-label":"Zvogëlo sasinë",children:e.jsx(za,{className:"h-3 w-3"})}),e.jsx("span",{className:"w-10 text-center text-xs font-black tabular-nums",children:Lr(g.quantity)}),e.jsx("button",{type:"button",onClick:ke=>{ke.stopPropagation(),$(it=>it.map(ue=>ue.id===g.id?{...ue,quantity:ue.quantity+1}:ue))},className:"px-1.5 py-1.5 text-slate-500 transition hover:text-blue-600","aria-label":"Rrit sasinë",children:e.jsx(Ir,{className:"h-3 w-3"})})]}),e.jsxs("span",{className:"text-right font-semibold tabular-nums",children:["€",wr(Me)]}),e.jsxs("div",{className:"flex flex-col items-end gap-1",children:[e.jsx("span",{className:I("text-right font-semibold tabular-nums",Be>0?"text-emerald-600":"text-slate-400"),children:Be>0?`−${Ve(Be)}`:"0%"}),e.jsx(Ya,{item:g,setCart:$})]}),e.jsxs("span",{className:"text-right font-black tabular-nums text-slate-900",children:["€",Vl(ie?.total||0)]}),e.jsx("button",{type:"button",onClick:ke=>{ke.stopPropagation(),$(it=>it.filter(ue=>ue.id!==g.id))},className:"rounded-md p-1.5 text-slate-400 transition hover:bg-rose-50 hover:text-rose-600","aria-label":`Hiq ${g.name}`,children:e.jsx(Er,{className:"h-4 w-4"})})]},g.id)})]})}),e.jsxs("div",{className:"retail-market-total-strip grid grid-cols-[minmax(0,1.1fr)_minmax(10rem,.95fr)_minmax(8rem,.75fr)] items-center gap-4 bg-[#15263e] px-5 py-3 text-white",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[10px] font-black uppercase tracking-[0.18em] text-slate-300",children:"Totali"}),e.jsx("div",{className:"mt-1 text-[2.4rem] font-black leading-none tracking-[-0.05em] tabular-nums",children:Ve(Y.total)})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 border-l border-white/15 pl-4 text-[11px]",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-400",children:"Nëntotali"}),e.jsx("strong",{className:"mt-1 block tabular-nums",children:Ve(Y.subtotal)})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-400",children:"Zbritja"}),e.jsx("strong",{className:"mt-1 block tabular-nums",children:Ve(Y.discountTotal)})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-slate-400",children:"TVSH (18%)"}),e.jsx("strong",{className:"mt-1 block tabular-nums",children:Ve(Y.taxTotal)})]})]}),e.jsxs("div",{className:"border-l border-white/15 pl-4 text-right text-[11px]",children:[e.jsxs("span",{className:"text-slate-400",children:["Artikuj: ",B.length]}),e.jsxs("strong",{className:"mt-1 block text-sm tabular-nums",children:["Sasi totale: ",Lr(Y.itemCount)]})]})]}),e.jsxs("div",{id:"retail-market-payment",className:"retail-market-payment-zone border-t border-slate-200 bg-white px-4 py-3 sm:px-5",children:[e.jsxs("div",{className:"retail-market-payment-row grid grid-cols-4 gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>H("cash"),className:I("retail-market-payment-tile rounded-xl bg-emerald-500 px-2 py-2 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-emerald-600",!Ge&&J==="paid"&&Fe==="cash"&&"ring-2 ring-emerald-200 ring-offset-1"),children:[e.jsx(Rn,{className:"mx-auto h-4 w-4"}),e.jsx("span",{className:"mt-1 block text-[10px] font-black uppercase",children:"Kesh"}),e.jsx("kbd",{className:"mt-1 hidden text-[9px] font-bold text-emerald-100 sm:block",children:"F7"})]}),e.jsxs("button",{type:"button",onClick:()=>H("credit_card"),className:I("retail-market-payment-tile rounded-xl bg-blue-600 px-2 py-2 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-blue-700",!Ge&&J==="paid"&&Fe==="credit_card"&&"ring-2 ring-blue-200 ring-offset-1"),children:[e.jsx(Gs,{className:"mx-auto h-4 w-4"}),e.jsx("span",{className:"mt-1 block text-[10px] font-black uppercase",children:"Kartë"}),e.jsx("kbd",{className:"mt-1 hidden text-[9px] font-bold text-blue-100 sm:block",children:"F10"})]}),e.jsxs("button",{type:"button",onClick:bt,className:I("retail-market-payment-tile rounded-xl bg-violet-500 px-2 py-2 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-violet-600",Ge&&"ring-2 ring-violet-200 ring-offset-1"),children:[e.jsx(fa,{className:"mx-auto h-4 w-4"}),e.jsx("span",{className:"mt-1 block text-[10px] font-black uppercase",children:"Komb
2inuar"}),e.jsx("kbd",{className:"mt-1 hidden text-[9px] font-bold text-violet-100 sm:block",children:"F10"})]}),e.jsxs("button",{type:"button",onClick:Te,className:I("retail-market-payment-tile rounded-xl bg-orange-500 px-2 py-2 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-orange-600",J==="pending"&&"ring-2 ring-orange-200 ring-offset-1"),children:[e.jsx(On,{className:"mx-auto h-4 w-4"}),e.jsx("span",{className:"mt-1 block text-[10px] font-black uppercase",children:"Borxh"}),e.jsx("kbd",{className:"mt-1 hidden text-[9px] font-bold text-orange-100 sm:block",children:"F10"})]}),e.jsxs("button",{type:"button",onClick:We,disabled:B.length===0||Ke,className:"retail-market-pay-button col-span-4 flex min-h-[4.2rem] items-center justify-between rounded-xl bg-[#20b568] px-4 text-left text-white shadow-lg shadow-emerald-500/20 transition hover:-translate-y-0.5 hover:bg-[#18a45b] disabled:cursor-not-allowed disabled:opacity-45",children:[e.jsxs("span",{children:[e.jsx("span",{className:"block text-[10px] font-black uppercase tracking-[0.18em] text-emerald-100",children:J==="paid"?"Pay":"Në pritje"}),e.jsx("strong",{className:"mt-0.5 block text-xl font-black tabular-nums",children:Ve(Y.total)})]}),Ke?e.jsx(qt,{className:"h-6 w-6 animate-spin"}):e.jsx("span",{className:"rounded-md bg-white/20 px-2 py-1 text-[10px] font-black",children:"ENTER"})]})]}),e.jsx("div",{className:"mt-3",children:e.jsx(es,{choice:fr,setChoice:Qe,email:Xe,setEmail:tr,consent:rr,setConsent:gr})}),e.jsxs("div",{className:"retail-market-advanced-toggle mt-2 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-[11px] text-slate-500",children:[e.jsx("span",{className:"font-bold",children:"Metoda:"}),e.jsx("select",{value:Fe,onChange:g=>H(g.target.value),className:"h-8 min-w-0 rounded-lg border border-slate-200 bg-slate-50 px-2 text-[11px] font-bold text-slate-700 outline-none focus:border-blue-400","aria-label":"Metoda e pagesës",children:Wn.map(g=>e.jsx("option",{value:g,children:Hn[g]},g))})]}),e.jsx("button",{type:"button",onClick:()=>Kt(g=>!g),className:"shrink-0 rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-[11px] font-black text-slate-600 transition hover:border-blue-300 hover:bg-blue-50 hover:text-blue-700",children:he?"Mbyll opsionet":"Opsione të faturës"})]}),he&&e.jsx("div",{className:"retail-market-advanced-panel mt-3 rounded-xl border border-slate-200 bg-slate-50 p-3",children:e.jsx($i,{total:Y.total,manualDiscountPercent:E,setManualDiscountPercent:at,manualDiscountAmount:gt,setManualDiscountAmount:er,paymentMethod:Fe,setPaymentMethod:w,checkoutMode:J,setCheckoutMode:je,isSplitPayment:Ge,setIsSplitPayment:Se,splitPayments:Tt,setSplitPayments:et,cashReceived:de,setCashReceived:ae,clients:ze,selectedClientId:Z,setSelectedClientId:Re,deliveryChoice:fr,setDeliveryChoice:Qe,deliveryEmail:Xe,setDeliveryEmail:tr,electronicReceiptConsent:rr,setElectronicReceiptConsent:gr,hideQuickPaymentButtons:!0})})]}),e.jsxs("div",{className:"retail-market-utility-grid grid grid-cols-4 gap-2 border-t border-slate-200 bg-slate-50 px-4 py-2 sm:px-5",children:[e.jsxs("button",{type:"button",onClick:It,className:"retail-market-utility-button",children:[e.jsx(ba,{})," ",e.jsx("span",{children:"Skano çmimi"}),e.jsx("kbd",{children:"F2"})]}),e.jsxs("button",{type:"button","data-pos-action":"quantity",onClick:Ct,className:"retail-market-utility-button",children:[e.jsx(Ir,{})," ",e.jsx("span",{children:"Ndrysho sasi"}),e.jsx("kbd",{children:"F8"})]}),e.jsxs("button",{type:"button","data-pos-action":"manual-price",onClick:ye,className:"retail-market-utility-button",children:[e.jsx(Rn,{})," ",e.jsx("span",{children:"Çmim manual"}),e.jsx("kbd",{children:"F7"})]}),e.jsxs("button",{type:"button","data-pos-action":"scale",onClick:sr,className:"retail-market-utility-button",children:[e.jsx(yo,{})," ",e.jsx("span",{children:"Peshore"}),e.jsx("kbd",{children:"F9"})]}),e.jsxs("button",{type:"button",onClick:()=>pe("/dashboard/invoices"),className:"retail-market-utility-button",children:[e.jsx(En,{})," ",e.jsx("span",{children:"Artikujt e fundit"})]}),e.jsxs("button",{type:"button",onClick:()=>pe("/dashboard/z-reports"),className:"retail-market-utility-button",children:[e.jsx(ko,{})," ",e.jsx("span",{children:"Raport i shpejtë"})]}
2),e.jsxs("button",{type:"button","data-pos-action":"notes",onClick:()=>Le(!0),className:"retail-market-utility-button",children:[e.jsx(ga,{})," ",e.jsx("span",{children:"Hap komente"})]}),e.jsxs("button",{type:"button",onClick:()=>pe("/dashboard"),className:"retail-market-utility-button retail-market-utility-danger",children:[e.jsx(No,{})," ",e.jsx("span",{children:"Dil nga POS"})]})]})]}),e.jsxs("section",{id:"retail-market-catalog","data-pos-region":"retail-catalog",className:"retail-market-catalog min-w-0 bg-[#f7f9fc]",children:[e.jsxs("div",{className:"retail-market-catalog-tabs flex items-center border-b border-slate-200 bg-white px-4 pt-2 sm:px-5",children:[e.jsxs("button",{type:"button",onClick:()=>Rt("products"),className:I("retail-market-catalog-tab flex items-center gap-2 px-3 py-3 text-sm font-black",Pe==="products"?"is-active text-blue-600":"text-slate-500"),children:[e.jsx(pn,{className:"h-4 w-4"})," Produkte"]}),e.jsxs("button",{type:"button",onClick:()=>Rt("favorites"),className:I("retail-market-catalog-tab flex items-center gap-2 px-3 py-3 text-sm font-black",Pe==="favorites"?"is-active text-blue-600":"text-slate-500"),children:[e.jsx(us,{className:"h-4 w-4"})," Favoritet",_t.size>0&&e.jsx("span",{className:"rounded-full bg-blue-50 px-1.5 py-0.5 text-[10px] text-blue-700",children:_t.size})]}),e.jsxs("div",{className:"ml-auto flex items-center gap-1 text-slate-400",children:[e.jsx("button",{type:"button",onClick:()=>jt("grid"),className:I("rounded-lg p-2 transition hover:bg-slate-100",vt==="grid"&&"bg-blue-50 text-blue-600"),"aria-label":"Pamje grid",children:e.jsx(fa,{className:"h-4 w-4"})}),e.jsx("button",{type:"button",onClick:()=>jt("list"),className:I("rounded-lg p-2 transition hover:bg-slate-100",vt==="list"&&"bg-blue-50 text-blue-600"),"aria-label":"Pamje listë",children:e.jsx(wo,{className:"h-4 w-4"})})]})]}),e.jsxs("div",{className:"retail-market-catalog-search flex gap-2 border-b border-slate-200 bg-white px-4 py-3 sm:px-5",children:[e.jsxs("div",{className:"relative min-w-0 flex-1",children:[e.jsx(Ur,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400"}),e.jsx(nt,{value:s,onChange:g=>j(g.target.value),placeholder:"Kërko produkt...",className:"h-10 border-slate-200 bg-slate-50 pl-10 text-sm","aria-label":"Kërko në katalog"})]}),e.jsx("button",{type:"button",onClick:It,className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-500 transition hover:border-blue-300 hover:text-blue-600","aria-label":"Skano barkod",children:e.jsx(ha,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"retail-market-catalog-content min-h-0 flex-1",children:[e.jsxs("aside",{className:"retail-market-category-nav border-r border-slate-200 bg-white p-2 sm:p-3",children:[e.jsx("div",{className:"mb-2 hidden px-2 text-[10px] font-black uppercase tracking-[0.16em] text-slate-400 sm:block",children:"Kategoritë"}),P.map(g=>e.jsxs("button",{type:"button",onClick:()=>v(g),className:I("retail-market-category-button flex w-full items-center gap-2 rounded-lg px-3 py-2.5 text-left text-xs font-bold transition",y===g?"bg-blue-500 text-white shadow-sm":"text-slate-600 hover:bg-slate-100"),children:[e.jsx("span",{className:"retail-market-category-dot"}),e.jsx("span",{className:"min-w-0 truncate",children:g})]},g))]}),e.jsx("div",{className:"retail-market-product-scroll min-h-0 overflow-auto p-3 sm:p-4",children:O?e.jsxs("div",{className:"flex min-h-[18rem] items-center justify-center gap-2 text-sm text-slate-500",children:[e.jsx(qt,{className:"h-5 w-5 animate-spin text-blue-500"})," Duke ngarkuar produktet..."]}):se.length===0?e.jsxs("div",{className:"flex min-h-[18rem] flex-col items-center justify-center gap-2 text-center text-slate-400",children:[e.jsx(Qs,{className:"h-10 w-10 text-slate-300"}),e.jsx("p",{className:"text-sm font-bold text-slate-600",children:Pe==="favorites"?"Nuk ka produkte të preferuara.":"Nuk u gjet asnjë produkt."}),e.jsx("p",{className:"text-xs",children:"Provo një kategori tjetër ose ndrysho kërkimin."})]}):e.jsx("div",{className:I(vt==="grid"?"retail-market-product-grid":"retail-market-product-list"),children:se.map(g=>{const G=_t.has(g.id);return e.jsxs("article",{className:I("retail-market-product-card group relative",vt==="list"&&"is-list"),children:[e.jsx("button",{type:"button",onClick:()=>
2h(g.id),className:I("absolute right-2 top-2 z-10 rounded-full p-1.5 transition",G?"bg-amber-50 text-amber-500":"text-slate-300 hover:bg-slate-100 hover:text-amber-500"),"aria-label":G?`Hiq ${g.name} nga të preferuarat`:`Shto ${g.name} te të preferuarat`,children:e.jsx(us,{className:"h-4 w-4",fill:G?"currentColor":"none"})}),e.jsxs("button",{type:"button",onClick:()=>b(g),className:"retail-market-product-add flex min-w-0 flex-1 text-left",children:[e.jsx(wd,{item:g}),e.jsxs("div",{className:"mt-2 min-w-0",children:[e.jsx("div",{className:"line-clamp-2 min-h-8 pr-5 text-xs font-black leading-4 text-slate-800",children:g.name}),e.jsxs("div",{className:"mt-1 flex items-baseline justify-between gap-2",children:[e.jsxs("span",{className:"text-sm font-black tabular-nums text-slate-900",children:["€",wr(bn(g))]}),g.discountPercent>0&&e.jsxs("span",{className:"text-[10px] text-slate-400 line-through",children:["€",wr(hn(g))]})]}),e.jsx("div",{className:"mt-1 truncate text-[10px] font-semibold text-slate-400",children:g.stockLabel}),e.jsxs("div",{className:"mt-0.5 truncate text-[9px] text-slate-400",children:["ATK ",g.productCategory," · Njësia ",g.measurementUnit]})]})]})]},g.id)})})})]}),e.jsxs("div",{className:"retail-market-catalog-footer grid grid-cols-2 gap-2 border-t border-slate-200 bg-white p-3 text-[10px] font-black text-slate-600",children:[e.jsxs("button",{type:"button",onClick:()=>pe("/dashboard/z-reports"),className:"rounded-lg border border-slate-200 bg-slate-50 px-2 py-2 transition hover:bg-blue-50 hover:text-blue-700",children:[e.jsx(Mn,{className:"mx-auto mb-1 h-4 w-4"}),"Raportet Z"]}),e.jsxs("button",{type:"button",onClick:()=>pe("/dashboard/products"),className:"rounded-lg border border-slate-200 bg-slate-50 px-2 py-2 transition hover:bg-blue-50 hover:text-blue-700",children:[e.jsx(pa,{className:"mx-auto mb-1 h-4 w-4"}),"Menaxho produkte"]})]})]})]}),tt&&e.jsx("div",{className:"fixed inset-0 z-[70] flex items-center justify-center bg-slate-950/45 p-4",role:"dialog","aria-modal":"true","aria-labelledby":"pos-scale-title",onClick:()=>St(!1),children:e.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-slate-200 bg-white p-5 shadow-2xl",onClick:g=>g.stopPropagation(),children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"pos-scale-title",className:"text-base font-black text-slate-900",children:"Peshore / sasi manuale"}),e.jsx("p",{className:"mt-1 text-xs text-slate-500",children:"Vendos peshën ose sasinë për artikullin e zgjedhur."})]}),e.jsx("button",{type:"button",onClick:()=>St(!1),className:"rounded-lg p-1 text-slate-400 hover:bg-slate-100 hover:text-slate-700","aria-label":"Mbyll peshoren",children:e.jsx(Er,{className:"h-4 w-4"})})]}
2),e.jsx(nt,{autoFocus:!0,type:"number",min:"0.01",step:"0.0001",inputMode:"decimal",value:Gt,onChange:g=>ar(g.target.value),onKeyDown:g=>{g.key==="Enter"&&(g.preventDefault(),kt())},className:"mt-4 h-11 border-slate-200 bg-slate-50 text-right text-lg font-black","aria-label":"Pesha ose sasia"}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:()=>St(!1),className:"rounded-lg border border-slate-200 px-4 py-2 text-sm font-bold text-slate-600 hover:bg-slate-50",children:"Anulo"}),e.jsx("button",{type:"button",onClick:kt,className:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-black text-white hover:bg-blue-700",children:"Ruaj sasinë"})]})]})}),ht&&e.jsx("div",{className:"fixed inset-0 z-[70] flex items-center justify-center bg-slate-950/45 p-4",role:"dialog","aria-modal":"true","aria-labelledby":"pos-notes-title",onClick:()=>Le(!1),children:e.jsxs("div",{className:"w-full max-w-lg rounded-2xl border border-slate-200 bg-white p-5 shadow-2xl",onClick:g=>g.stopPropagation(),children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"pos-notes-title",className:"text-base font-black text-slate-900",children:"Komentet e faturës"}),e.jsx("p",{className:"mt-1 text-xs text-slate-500",children:"Ky shënim ruhet në faturë kur përfundohet shitja."})]}),e.jsx("button",{type:"button",onClick:()=>Le(!1),className:"rounded-lg p-1 text-slate-400 hover:bg-slate-100 hover:text-slate-700","aria-label":"Mbyll komentet",children:e.jsx(Er,{className:"h-4 w-4"})})]}),e.jsx("textarea",{autoFocus:!0,rows:5,value:F,onChange:g=>Et(g.target.value),placeholder:"Shkruaj shënimin për këtë faturë...",className:"mt-4 w-full resize-y rounded-xl border border-slate-200 bg-slate-50 p-3 text-sm text-slate-800 outline-none transition focus:border-blue-400 focus:ring-2 focus:ring-blue-100","aria-label":"Shënimi i faturës"}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:()=>Le(!1),className:"rounded-lg border border-slate-200 px-4 py-2 text-sm font-bold text-slate-600 hover:bg-slate-50",children:"Mbyll"}),e.jsx("button",{type:"button",onClick:()=>{Le(!1),f.success("Komenti u ruajt për këtë faturë.")},className:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-black text-white hover:bg-blue-700",children:"Ruaj komentin"})]})]})}),e.jsxs("footer",{className:"retail-market-statusbar hidden items-center justify-between gap-4 border-t border-slate-200 bg-white px-4 text-[10px] font-semibold text-slate-500 lg:flex",children:[e.jsx("span",{children:"FaturaPro POS v1.0.0"}),e.jsxs("span",{children:["Kompania: ",t]}),e.jsx("span",{children:"Magazina: MARKET QENDRA"}),e.jsx("span",{children:"Ctrl+F Kërkim i avancuar"}),e.jsx("span",{children:"Ctrl+P Printo last"}),e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-emerald-600",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500"})," Lidhu sync: lokalizim"]})]}),e.jsxs("nav",{className:"retail-market-mobile-nav fixed inset-x-0 bottom-0 z-50 grid grid-cols-4 gap-1 border-t border-slate-200 bg-white/95 p-2 pb-[max(.5rem,env(safe-area-inset-bottom))] shadow-[0_-8px_24px_rgba(15,23,42,.12)] backdrop-blur lg:hidden",children:[e.jsx("button",{type:"button",onClick:It,className:"rounded-lg bg-blue-600 px-2 py-2 text-[11px] font-black text-white",children:"Skano"}),e.jsx("button",{type:"button",onClick:()=>z("#retail-market-payment"),className:"rounded-lg bg-emerald-600 px-2 py-2 text-[11px] font-black text-white",children:"Pagesa"}),e.jsx("button",{type:"button",onClick:()=>z("#retail-market-catalog"),className:"rounded-lg border border-slate-200 bg-slate-50 px-2 py-2 text-[11px] font-black text-slate-700",children:"Katalogu"}),e.jsx("button",{type:"button",onClick:Q,disabled:!B.length,className:"rounded-lg border border-rose-200 bg-rose-50 px-2 py-2 text-[11px] font-black text-rose-700 disabled:opacity-40",children:"Pastro"})]})]})}function Sd({catalog:t,cart:r,addToCart:n,setCart:a,totals:l,manualDiscountPercent:o,setManualDiscountPercent:m,manualDiscountAmount:u,setManualDiscountAmount:s,deliveryChoice:j,setDeliveryChoice:y,deliveryEmail:v,setDeliveryEmail:P,electronicReceiptConsent:N,setElectronicReceiptConsent:O,search:B,setSearch:$,isLoading:b,isCheckoutInFlight:Y,onCheckout:ce,paymentMethod:k,setPaymentMethod:Q,checkoutMode:Ke,setCheckoutMode:We,isSplitPayment:Fe,setIsSplitPayment:w,splitPayments:J,setSplitPayments:je,cashReceived:Ge,setCashReceived:Se,clients:Tt,categoryTabs:et,selectedClientId:de,setSelectedClientId:ae,onManageMenu:ze,companyId:Z,businessName:Re,logoUrl:E,fiscalStatus:at,pendingCount:gt,posFiscalUnitSelector:er}){const fr=qa(),[Qe,Xe]=d.useState("tables"),[tr]=Ma(),[rr,gr]=d.useState("Brenda"),[F,Et]=d.useState("T1"),[pt,It]=d.useState("Të gjitha"),[nr,pe]=d.useState(null),[Ce,Pe]=d.useState(null),[Rt,vt]=d.useState(""),[jt,_t]=d.useState("4"),[Ot,V]=d.use
2State("Brenda"),[yt,he]=d.useState("free"),[Kt,tt]=d.useState(!1),St=`faturapro:restaurant-open-orders:${Z}`,Gt=`faturapro:restaurant-tables:${Z}`,ar=`faturapro:restaurant-notes:${Z}`,ht=`faturapro:restaurant-stations:${Z}`,[Le,se]=d.useState(()=>{try{return JSON.parse(localStorage.getItem(St)||"{}")}catch{return{}}}),[H,bt]=d.useState(()=>{let i=jd;try{const x=JSON.parse(localStorage.getItem(Gt)||"null");Array.isArray(x)&&x.length&&(i=x)}catch{}return i.map(x=>{const C=Le[x.id]||[],_=C.reduce((re,qe)=>re+qe.price*qe.quantity*(1-qe.discountPercent/100),0);return{...x,status:C.length?"occupied":"free",total:C.length?_:void 0,time:void 0}})}),[Te,Ct]=d.useState(()=>{try{return JSON.parse(localStorage.getItem(ar)||"{}")}catch{return{}}}),[ye,sr]=d.useState(()=>{try{return JSON.parse(localStorage.getItem(ht)||"{}")}catch{return{}}}),[kt,h]=d.useState("none"),[z,L]=d.useState(""),A=`faturapro:restaurant-work-printers:${Z}`,g=`faturapro:restaurant-work-tickets:${Z}`,[G,ie]=d.useState([]),[Me,Be]=d.useState(()=>{try{return JSON.parse(localStorage.getItem(A)||"{}")}catch{return{kitchen:"",bar:""}}}),[st,ke]=d.useState(()=>{try{return JSON.parse(localStorage.getItem(g)||"{}")}catch{return{}}}),[it,ue]=d.useState(null),Qt=d.useRef(H),mr=d.useRef(Le),Pr=d.useRef(F),Hr=d.useRef(t),Wr=d.useRef(Te);Wr.current=Te;const ne=d.useRef(!1),ir=d.useRef(null);d.useEffect(()=>{Hr.current=t},[t]),d.useEffect(()=>{tr.get("view")==="tables"&&Xe("tables")},[tr]);const dt=H.find(i=>i.id===F)||H[0]||{id:"—",seats:0,zone:"Brenda",status:"free"},vr=Jt(B.trim()),ut=H.filter(i=>(rr==="Të gjitha"||i.zone===rr)&&(!vr||Jt(i.id).includes(vr)||Jt(i.zone).includes(vr))),Dt=t.filter(i=>{const x=Jt(i.name).includes(Jt(B)),C=pt==="Të gjitha"||i.tab===pt||(pt==="Të tjera"?Mi(et,i.name,i.description):Qa(pt,i.name,i.description));return x&&C}),Xt={total:H.length,free:H.filter(i=>i.status==="free").length,occupied:H.filter(i=>i.status==="occupied").length,reserved:H.filter(i=>i.status==="reserved").length};d.useEffect(()=>{if(!H.length||H.some(x=>x.id===F))return;const i=H[0];Et(i.id),a(Le[i.id]||[])},[Le,F,a,H]);const zt=(i,x)=>a(C=>C.map(_=>{if(_.id!==i)return _;const re=_.quantity+x;return x>0&&_.stockTracked===!0&&_.stockQuantity!=null&&re>_.stockQuantity?(f.error(`Stok i pamjaftueshëm për "${_.name}".`),_):{..._,quantity:re}}).filter(_=>_.quantity>0));d.useEffect(()=>{se(i=>({...i,[F]:r})),bt(i=>i.map(x=>x.id===F?{...x,status:r.length?"occupied":x.status==="occupied"?"free":x.status,total:r.length?l.total:void 0}:x))},[r,F,l.total]),d.useEffect(()=>{localStorage.setItem(St,JSON.stringify(Le))},[Le,St]),d.useEffect(()=>{localStorage.setItem(Gt,JSON.stringify(H))},[H,Gt]),d.useEffect(()=>{localStorage.setItem(A,JSON.stringify(Me))},[Me,A]),d.useEffect(()=>{localStorage.setItem(g,JSON.stringify(st))},[st,g]),d.useEffect(()=>{localStorage.setItem(ar,JSON.stringify(Te))},[Te,ar]),d.useEffect(()=>{localStorage.setItem(ht,JSON.stringify(ye))},[ye,ht]),d.useEffect(()=>{if(!Z||ir.current===Z)return;ir.current=Z;let i=!0;return Vc(Z).then(x=>{if(!i)return;ne.current=!0;const C=Qt.current,_=mr.current,re=new Map(x.tables.map(X=>[X.code,X])),qe=new Map(x.openOrders.map(X=>[X.table_code,X])),wt=C.filter(X=>!re.has(X.id)),Ft=[...x.tables.map(X=>{const ve=qe.has(X.code);return{id:X.code,seats:X.seats,zone:X.zone,status:ve?"occupied":X.status==="reserved"||X.status==="cleaning"?X.status:"free",total:void 0,time:void 0}}),...wt],be={..._};for(const X of x.openOrders){const fe=(Array.isArray(X.items)?X.items:[]).flatMap(Cr=>{if(!Cr||typeof Cr!="object")return[];const pr=Cr,Gr=Hr.current.find(Yn=>Yn.id===String(pr.id||"")),Qr=Math.max(1,Number(pr.quantity)||1);return Gr?[{...Gr,quantity:Qr}]:!pr.id||!pr.name?[]:[{...pr,quantity:Qr}]});fe.length&&(be[X.table_code]=fe)}bt(Ft),se(be);const mt=be[Pr.current];mt?.length&&a(mt),Promise.all(wt.map((X,ve)=>un({company_id:Z,code:X.id,seats:X.seats,zone:X.zone,status:X.status,sort_order:ve,is_active:!0}))).catch(X=>console.warn("[POS restaurant] table migration deferred:",X)),Promise.all(Object.entries(_).filter(([X,ve])=>ve.length&&!qe.has(X)).map(([X,ve])=>wn({companyId:Z,tableCode:X,items:ve,notes:Wr.current[X]}))).catch(X=>console.warn("[POS restaurant] open-order migration deferred:",X))}).catch(x=>{ne.current=!1,console.warn("[POS restaurant] remote workspace unavailable; using local snapshot:",x)}),()=>{i=!1}},[Z,a]),d.useEffect(()=>{if(!Z||!ne.current||!F)return;const i=window.setTimeout(()=>{const x=r;(x.length?wn({companyId:Z,tableCode:F,items:x,notes:Te[F]}):Ds(Z,F)).catch(_=>console.warn("[POS restaurant] open-order sync deferred:",_))},250);return()=>window.clearTimeout(i)},[r,Z,Te,F]);const or=H.map(i=>`${i.id}|${i.seats}|${i.zone}|${i.status}`).join("||");d.useEffect(()=>{if(!Z||!ne.current||!H.length)return;const i=window.setTimeout(()=>{Promise.all(H.map((x,C)=>un({company_id:Z,code:x.id,seats:x.seats,zone:x.zone,status:x.status,sort_order:C,is_active:!0}))).catch(x=>console.warn("[POS restaurant] table sync deferred:",x))},350);return()=>window.clearTimeout(i)},[Z,or,H]),d.useEffect(()=>{let i=!0;const x=window.electronAPI?.printers?.list;
2if(x)return x().then(C=>{i&&ie(C||[])}).catch(()=>{i&&ie([])}),()=>{i=!1}},[]);const Ie=()=>{const i=new Set(H.map(_=>Jt(_.id)));let x=H.reduce((_,re)=>{const qe=Number(re.id.replace(/\D/g,""))||0;return Math.max(_,qe)},0)+1,C=`T${x}`;for(;i.has(Jt(C));)x+=1,C=`T${x}`;return C},xt=(i,x)=>{const C=i==="edit"?x:void 0;Pe(C?.id||null),vt(C?.id||Ie()),_t(String(C?.seats||4)),V(C?.zone||"Brenda"),he(C?.status||"free"),h("table")},ot=async i=>{i.preventDefault();const x=Ce,C=Rt.trim().replace(/\s+/g," "),_=Math.round(Number(jt)),re=x?H.find(mt=>mt.id===x):void 0,qe=!!(x&&Le[x]?.length);if(x&&!re){f.error("Kjo tavolinë nuk është më aktive. Rifresko listën dhe provo përsëri.");return}if(!C||C.length>32){f.error("Emri i tavolinës duhet të ketë 1 deri në 32 karaktere.");return}if(!Number.isInteger(_)||_<1||_>100){f.error("Numri i vendeve duhet të jetë nga 1 deri në 100.");return}if(H.some(mt=>mt.id!==x&&Jt(mt.id)===Jt(C))){f.error("Ekziston tashmë një tavolinë me këtë emër.");return}const wt=qe?"occupied":yt==="occupied"?"free":yt,Ft=re?H.indexOf(re):H.length;let be=null;tt(!0);try{if(ne.current)try{x&&x!==C?await Wc({companyId:Z,oldCode:x,newCode:C,seats:_,zone:Ot,status:wt,sortOrder:Ft}):await un({company_id:Z,code:C,seats:_,zone:Ot,status:wt,sort_order:Ft,is_active:!0})}catch(X){if(x&&x!==C&&!Nr(X))throw X;be=X}const mt={id:C,seats:_,zone:Ot,status:wt,total:re?.total,time:re?.time};if(x){const X=Le[x]||[];bt(ve=>ve.map(fe=>fe.id===x?mt:fe)),se(ve=>{const fe={...ve};return x!==C&&(fe[C]=fe[x]||X,delete fe[x]),fe}),Ct(ve=>{if(x===C)return ve;const fe={...ve};return fe[x]!=null&&(fe[C]=fe[x]),delete fe[x],fe}),ke(ve=>{if(x===C)return ve;const fe={...ve};return delete fe[x],delete fe[C],fe}),F===x&&(Et(C),a(X)),f.success(x===C?`${C} u përditësua.`:`${x} u riemërtua në ${C}.`)}else bt(X=>[...X,mt]),se(X=>({...X,[C]:[]})),H.length||(Et(C),a([])),f.success(`${C} u shtua.`);h("none"),be&&f.warning("Ndryshimi u ruajt lokalisht; sinkronizimi cloud do të provohet përsëri.")}catch(mt){f.error(`Ndryshimi i tavolinës dështoi: ${mt instanceof Error?mt.message:"gabim i panjohur"}`)}finally{tt(!1)}},q=(i=F)=>{const x=H.find(_=>_.id===i);if(!x)return;if(H.length<=1){f.error("Duhet të mbetet të paktën një tavolinë aktive.");return}if(x.status==="occupied"||Le[i]?.length){f.error("Nuk mund të hiqet një tavolinë me porosi aktive.");return}if(!window.confirm(`A dëshiron ta heqësh tavolinën ${i}?`))return;const C=H.find(_=>_.id!==i);bt(_=>_.filter(re=>re.id!==i)),se(_=>{const re={..._};return delete re[i],re}),Ct(_=>{const re={..._};return delete re[i],re}),ke(_=>{const re={..._};return delete re[i],re}),F===i&&C&&(Et(C.id),a(Le[C.id]||[])),ne.current&&Ra(Z,i).catch(_=>console.warn("[POS restaurant] table removal deferred:",_)),h("none"),f.success(`${i} u hoq.`)},Ze=i=>ye[i.id]?ye[i.id]:/kafe|espresso|capp|latte|macchi|uje|cola|pije|birr|ver[eë]|l[eë]ng|limon/i.test(i.name)?"bar":"kitchen",Pt=i=>r.filter(x=>Ze(x)===i),Zt=JSON.stringify({table:F,notes:Te[F]||"",items:r.map(i=>({id:i.id,quantity:i.quantity,station:ye[i.id]||null}))}),Lt=async(i,x=`${F}-${Date.now().toString(36).toUpperCase()}`)=>{if(!r.length)return f.error("Shto artikuj para se ta dërgosh porosinë."),!1;const C=Pt(i),_=i==="bar"?"Banak":"Kuzhinë";if(!C.length)return f.info(`Nuk ka artikuj për ${_.toLowerCase()}.`),!1;let re=null;try{if(ne.current)try{re=await Gc({companyId:Z,tableCode:F,station:i,orderNumber:x,items:C.map(be=>({name:be.name,quantity:be.quantity})),notes:Te[F],printerName:Me[i]||void 0})}catch(be){console.warn("[POS restaurant] work-ticket audit deferred:",be)}const qe=Bc({station:i,stationLabel:_,companyName:Re,tableId:F,orderNumber:x,notes:Te[F],items:C.map(be=>({name:be.name,quantity:be.quantity}))}),wt=Ar();if(!await Da(qe,{filename:`porosi-${_.toLowerCase()}-${F}.pdf`,printerWidth:80,deviceName:Me[i]||void 0,silent:wt,noDialogFallback:wt}))throw new Error("Printeri nuk e pranoi kuponin e punës.");return re&&As(re,Z,"printed").catch(be=>console.warn("[POS restaurant] work-ticket status deferred:",be)),!0}catch(qe){return re&&As(re,Z,"failed",qe instanceof Error?qe.message:String(qe)).catch(wt=>console.warn("[POS restaurant] failed work-ticket status deferred:",wt)),console.error("[restaurant work ticket]",qe),f.error(`Printimi për ${_.toLowerCase()} dështoi.`),!1}},Sr=async()=>
2{if(!r.length){f.error("Shto artikuj para se ta dërgosh porosinë.");return}if(st[F]===Zt){f.info("Kjo porosi është dërguar tashmë. Përdor stacionin përkatës për ridërgim.");return}ue("all");try{const i=`${F}-${Date.now().toString(36).toUpperCase()}`;(await Promise.all([Pt("kitchen").length?Lt("kitchen",i):Promise.resolve(!1),Pt("bar").length?Lt("bar",i):Promise.resolve(!1)])).some(Boolean)&&(ke(C=>({...C,[F]:Zt})),f.success("Porosia u dërgua në stacionet përkatëse si kupon pune jo-fiskal."))}finally{ue(null)}},xe=(i,x)=>{se(_=>({..._,[F]:r})),Et(i);const C=Le[i]||[];a(C),H.find(_=>_.id===i),Xe(x)},Nt=()=>{if(!r.length){f.error("Shto artikuj para se ta mbash porosinë.");return}se(i=>({...i,[F]:r})),bt(i=>i.map(x=>x.id===F?{...x,status:"occupied",total:l.total}:x)),ne.current&&wn({companyId:Z,tableCode:F,items:r,notes:Te[F],status:"held"}).catch(i=>console.warn("[POS restaurant] held-order sync deferred:",i)),f.success(`Porosia e ${F} u ruajt.`),Xe("tables")},Ye=i=>{if(!r.length){f.error("Nuk ka porosi për transferim.");return}se(x=>({...x,[F]:[],[i]:r})),bt(x=>x.map(C=>C.id===F?{...C,status:"free",total:void 0}:C.id===i?{...C,status:"occupied",total:l.total}:C)),Et(i),h("none"),ne.current&&Promise.all([Ds(Z,F),wn({companyId:Z,tableCode:i,items:r,notes:Te[F]})]).catch(x=>console.warn("[POS restaurant] transfer sync deferred:",x)),f.success(`Porosia u transferua te ${i}.`)};return e.jsxs("div",{"data-pos-design":"restaurant-workspace","data-fiscal-engine":fn,className:"pos-restaurant-workspace min-h-dvh bg-[#070d16] text-slate-100 selection:bg-blue-500/30",children:[e.jsx("header",{className:"sticky top-0 z-40 border-b border-white/10 bg-[#080e18]/95 backdrop-blur-xl",children:e.jsxs("div",{className:"pos-restaurant-header flex h-16 min-w-0 items-center gap-2 px-3 sm:gap-3 sm:px-4 lg:px-6",children:[e.jsx("button",{onClick:()=>h("more"),className:"rounded-xl p-2 text-slate-300 hover:bg-white/5 lg:hidden","aria-label":"Menu",children:e.jsx(Fn,{})}),e.jsx(Ja,{businessName:Re,logoUrl:E,dark:!0,compact:!0}),e.jsxs("div",{className:"pos-restaurant-header-search hidden max-w-sm flex-1 items-center gap-2 rounded-xl border border-white/10 bg-[#0d1624] px-3 lg:flex",children:[e.jsx(Ur,{className:"h-4 w-4 text-slate-500"}),e.jsx("input",{value:B,onChange:i=>$(i.target.value),placeholder:Qe==="tables"?"Kërko tavolinë...":"Kërko produkt...",className:"h-10 flex-1 bg-transparent text-sm outline-none placeholder:text-slate-600"}),e.jsx("kbd",{className:"rounded border border-white/10 bg-white/5 px-2 py-1 text-xs text-slate-500",children:"F2"})]}),e.jsx("h1",{className:"min-w-0 flex-1 truncate text-center text-sm font-bold sm:text-base lg:text-left",children:Qe==="tables"?"Tavolinat":Qe==="menu"?`Porosia · ${F}`:Qe==="payment"?"Paguaj":`Tavolina ${F}`}),e.jsxs("div",{className:"hidden items-center gap-2 sm:flex",children:[e.jsx("button",{type:"button",onClick:()=>pe("return"),className:"min-h-10 rounded-xl border border-amber-400/30 px-3 text-xs font-bold text-amber-300 hover:bg-amber-400/10",children:"Kthim"}),e.jsx("button",{type:"button",onClick:()=>pe("void"),className:"min-h-10 rounded-xl border border-red-400/30 px-3 text-xs font-bold text-red-300 hover:bg-red-400/10",children:"Anulim"})]}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2 lg:gap-5",children:[e.jsx(Zn,{status:at,pendingCount:gt,compact:!0}),e.jsx("span",{className:"pos-restaurant-business-name max-w-[180px] truncate font-semibold",children:Re})]}),er,e.jsx("button",{onClick:()=>fr("/dashboard"),className:"rounded-xl p-2 text-slate-300 hover:bg-white/5","aria-label":"Kthehu në panel",children:e.jsx(Ka,{className:"h-5 w-5"})}),e.jsx("button",{onClick:()=>Xe("menu"),className:"rounded-xl bg-blue-600 p-2.5 lg:hidden","aria-label":"Shto artikull",children:e.jsx(Ir,{className:"h-5 w-5"})})]})}),e.jsxs("main",{className:"pos-restaurant-main grid min-w-0 min-h-[calc(100dvh-64px)] lg:grid-cols-[minmax(0,1fr)_330px]",children:[e.jsxs("section",{className:"min-w-0 p-3 pb-24 sm:p-5 lg:pb-5",children:[Qe==="tables"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2 rounded-xl border border-white/10 bg-[#0d1624] px-3 lg:hidden",children:[e.jsx(Ur,{className:"h-4 w-4 text-slate-500"}),e.jsx("input",{value:B,onChange:i=>$(i.target.value),placeholder:"Kërko tavolinë...",className:"h-11 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-slate-600"}),B&&e.jsx("button",{type:"button",onClick:()=>$(""),className:"rounded-md p-1 text-slate-500 hover:bg-white/5 hover:text-white","aria-label":"Pastro kërkimin",children:e.jsx(Er,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"mb-4 grid grid-cols-2 gap-2 sm:grid-cols-4",children:[["Gjithsej",Xt.total,"text-blue-300","bg-blue-500/10"],["Të lira",Xt.free,"text-emerald-300","bg-emerald-500/10"],["Të zëna",Xt.occupied,"text-orange-300","bg-orange-500/10"],["Rezervime",Xt.reserved,"text-violet-300","bg-vi
2olet-500/10"]].map(([i,x,C,_])=>e.jsxs("div",{className:I("rounded-2xl border border-white/10 px-3 py-3",_),children:[e.jsx("span",{className:"block text-[10px] font-bold uppercase tracking-[0.16em] text-slate-500",children:String(i)}),e.jsx("strong",{className:I("mt-1 block text-2xl font-black",String(C)),children:String(x)})]},String(i)))}),e.jsxs("div",{className:"mb-4 flex gap-2 overflow-x-auto pb-1",children:[["Të gjitha","Brenda","Tarraca","VIP"].map(i=>e.jsx("button",{onClick:()=>gr(i),className:I("whitespace-nowrap rounded-xl border px-4 py-2.5 text-sm font-semibold transition",rr===i?"border-blue-500 bg-blue-600 text-white":"border-white/10 bg-white/[.03] text-slate-400 hover:bg-white/[.06]"),children:i},i)),e.jsx("button",{onClick:ze,className:"ml-auto hidden min-h-11 rounded-xl border border-white/10 px-4 text-sm text-slate-300 sm:block",children:"Menaxho menunë"}),e.jsxs("button",{onClick:()=>xt("create"),className:"min-h-11 rounded-xl bg-blue-600 px-4 text-sm font-bold",children:[e.jsx(Ir,{className:"mr-1 inline h-4 w-4"})," Tavolinë"]}),e.jsxs("button",{onClick:()=>q(),disabled:!H.length||H.length<=1,className:"min-h-11 rounded-xl border border-red-400/30 px-3 text-sm font-bold text-red-300",children:[e.jsx(cn,{className:"mr-1 inline h-4 w-4"})," Hiq"]})]}),e.jsxs("div",{className:"mb-4 flex items-center justify-between rounded-2xl border border-white/10 bg-white/[.03] px-4 py-3 text-xs text-slate-400",children:[e.jsxs("span",{children:[ut.length," nga ",H.length," tavolina aktive",B.trim()?` · filtri “${B.trim()}”`:""]}),B.trim()&&e.jsx("button",{type:"button",onClick:()=>$(""),className:"rounded-lg px-2 py-1 font-bold text-blue-300 hover:bg-blue-500/10",children:"Pastro filtrin"})]}),e.jsxs("div",{className:"mb-4 hidden flex-wrap items-center gap-6 border-y border-white/10 py-3 text-xs text-slate-400 sm:flex",children:[e.jsxs("span",{children:[e.jsx("i",{className:"mr-2 inline-block h-2.5 w-2.5 rounded-full bg-emerald-500"}),"E lirë"]}),e.jsxs("span",{children:[e.jsx("i",{className:"mr-2 inline-block h-2.5 w-2.5 rounded-full bg-orange-500"}),"E zënë"]}),e.jsxs("span",{children:[e.jsx("i",{className:"mr-2 inline-block h-2.5 w-2.5 rounded-full bg-violet-500"}),"E rezervuar"]}),e.jsxs("span",{children:[e.jsx("i",{className:"mr-2 inline-block h-2.5 w-2.5 rounded-full bg-slate-500"}),"Pastrohet"]})]}),ut.length?e.jsx("div",{className:"grid grid-cols-3 gap-3 sm:grid-cols-4 xl:grid-cols-5",children:ut.map(i=>e.jsxs("div",{className:"relative min-w-0",children:[e.jsxs("button",{type:"button",onClick:()=>{xe(i.id,i.status==="free"?"menu":"order")},className:I("relative aspect-square w-full rounded-2xl border p-2 text-center shadow-xl transition hover:-translate-y-1 hover:brightness-110 sm:rounded-[28px]",Ks[i.status],F===i.id&&"ring-2 ring-blue-400 ring-offset-2 ring-offset-[#070d16]"),children:[e.jsx("span",{className:"block text-lg font-black sm:text-xl",children:i.id}),e.jsxs("span",{className:"mt-1 block text-[11px] text-white/75 sm:text-xs",children:[i.seats," vende"]}),i.time&&e.jsxs("span",{className:"mt-1 block text-[10px] text-white/70",children:["◷ ",i.time]}),i.total!=null&&e.jsxs("span",{className:"mt-1 block text-xs font-bold",children:[i.total.toFixed(2)," €"]}),i.status==="reserved"&&e.jsx("span",{className:"mt-1 block text-[9px] uppercase tracking-wide",children:"Rezervuar"}),i.status==="cleaning"&&e.jsx("span",{className:"mt-1 block text-[9px] uppercase",children:"Pastrohet"})]}),e.jsx("button",{type:"button","aria-label":`Ndrysho ${i.id}`,onClick:()=>xt("edit",i),className:"absolute right-2 top-2 grid h-8 w-8 place-items-center rounded-lg border border-white/20 bg-black/25 text-white/80 backdrop-blur transition hover:bg-black/45 hover:text-white",children:e.jsx(ea,{className:"h-3.5 w-3.5"})})]},i.id))}):e.jsxs("div",{className:"rounded-3xl border border-dashed border-white/15 bg-white/[.03] px-5 py-16 text-center",children:[e.jsx(ta,{className:"mx-auto mb-3 h-10 w-10 text-slate-500"}),e.jsx("p",{className:"font-bold",children:"Nuk u gjet tavolinë"}),e.jsx("p",{className:"mt-1 text-sm text-slate-500",children:"Ndrysho filtrin ose shto një tavolinë të re."})]})]}),Qe==="menu"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-4 flex flex-wrap items-center gap-3 rounded-2xl border border-blue-400/20 bg-[linear-gradient(120deg,rgba(30,64,175,.28),rgba(15,23,42,.72))] p-4 shadow-lg shadow-blue-950/20",children:[e.jsx("div",{className:"grid h-11 w-11 place-items-center rounded-xl bg-blue-500/20 text-blue-200",children:e.jsx(pn,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-[10px] font-bold uppercase tracking-[0.16em] text-blue-200/70",children:"Porosia aktive"}),e.jsxs("p",{className:"truncate text-sm font-black",children:[F," · ",l.itemCount," artikuj · ",Ve(l.total)]})]}),e.jsxs("button",{type:"button",onClick:()=>Xe("order"),disabled:!r.length,className:"min-h-11 rounded-xl bg-blue-600 px-4 text-sm font-bold transition hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-40",children:["Shiko porosinë",e.jsx(La,{className:"ml-1 inline h-4 w-4"})]})]}),e.jsx("div",{className:"mb-4 flex gap-2 overflow-x-auto pb-2",children:et.map(i=>e.jsx("button",{onClick:()=>It(i),className:I("whitespace-nowrap rounded-xl px-4 py-3 text-sm font-bold",pt===i?"bg-blue-600":"bg-white/[.04] text-slate-400"),children:i},i))}),e.jsxs("div",{className:"mb-4 flex items-center gap-2 rounded-xl border border-white/10 bg-[#0d1624] px-3 lg:hidden",children:[e.jsx(Ur,{className:"h-4 w-4 text-slate-500"}),e.jsx("input",{value:B,onChange:i=>$(i.target.value),placeholder:"Kërko artikull...",className:"h-11 flex-1 bg-transparent text-sm outline-none"})]}),b?e.jsx("div",{className:"grid place-items-center py-32",children:e.jsx(qt,{className:"animate-spin text-blue-400"})}):e.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3 xl:grid-cols-4",children:[Dt.map(i=>e.jsxs("button",{onClick:()=>n(i),"aria-label":`Shto ${i.name} në porosi`,className:"group relative rounded-2xl border border-white/[.07] bg-[#111c29] p-3 text-center transition hover:-translate-y-1 hover:border-blue-400/50 hover:bg-[#172536]",children:[r.find(x=>x.id===i.id)?.quantity?e.jsx("span",{className:"absolute right-2 top-2 grid h-7 min-w-7 place-items-center rounded-full bg-emerald-500 px-1.5 text-xs font-black text-slate-950",children:r.find(x=>x.id===i.id)?.quantity}):null,e.jsx("div",{className:"grid aspect-[1.4] place-items-center rounded-xl bg-[radial-gradient(circle_at_50%_35%,#334155,#111827_70%)] text-5xl drop-shadow-2xl sm:text-6xl",children:yd(i.name)}),e.jsx("h3",{className:"mt-3 truncate text-sm font-bold sm:text-base",children:i.name}),e.jsxs("div",{className:"mt-1 text-[9px] text-slate-500",children:["ATK ",i.productCategory," · Njësia ",i.measurementUnit]}),e.jsxs("div",{className:"mt-1 flex items-baseline justify-center gap-2",children:[i.discountPercent>0&&e.jsxs("span",{className:"text-xs text-slate-500 line-through",children:["€",wr(hn(i))]}),e.jsxs("span",{className:"text-sm font-bold text-emerald-300",children:["€",wr(bn(i))," me TVSH"]})]})]},i.id)),!Dt.length&&e.jsxs("div",{className:"col-span-full rounded-2xl border border-dashed border-white/15 bg-white/[.03] px-5 py-14 text-center",children:[e.jsx(xa,{
2className:"mx-auto mb-3 h-9 w-9 text-slate-500"}),e.jsx("p",{className:"font-bold",children:"Menuja nuk ka artikuj aktivë"}),e.jsx("p",{className:"mt-1 text-sm text-slate-500",children:"Shto produktet reale para se të pranosh porosi."}),e.jsx("button",{onClick:ze,className:"mt-4 min-h-11 rounded-xl bg-blue-600 px-5 font-bold",children:"Menaxho produktet"})]})]})]}),(Qe==="order"||Qe==="payment")&&e.jsxs("div",{className:"pos-restaurant-order mx-auto max-w-2xl",children:[e.jsxs("button",{onClick:()=>Xe("tables"),className:"mb-4 flex items-center gap-2 text-sm text-slate-400 hover:text-white",children:[e.jsx(Ws,{className:"h-4 w-4"})," Kthehu te tavolinat"]}),e.jsxs("div",{className:"mb-4 flex flex-wrap items-center gap-3 rounded-2xl border border-white/10 bg-[#0d1624] px-4 py-3",children:[e.jsx("div",{className:"grid h-10 w-10 place-items-center rounded-xl bg-orange-500/15 text-orange-300",children:e.jsx(ta,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-[10px] font-bold uppercase tracking-[0.16em] text-slate-500",children:"Tavolina aktive"}),e.jsxs("p",{className:"truncate font-black",children:[F," · ",dt.seats," vende"]})]}),e.jsxs("span",{className:"rounded-full bg-white/5 px-3 py-1 text-xs font-bold text-slate-300",children:[l.itemCount," artikuj"]}),e.jsx("button",{type:"button",onClick:()=>{L(Te[F]||""),h("note")},className:"min-h-10 rounded-xl border border-white/10 px-3 text-xs font-bold text-slate-300 hover:bg-white/5",children:Te[F]?"Ndrysho shënimin":"Shto shënim"})]}),e.jsxs("div",{className:"overflow-hidden rounded-2xl border border-white/10 bg-[#0d1624]",children:[e.jsxs("div",{className:"pos-restaurant-order-heading grid grid-cols-[minmax(0,1fr)_auto_auto] gap-3 border-b border-white/10 px-4 py-3 text-xs font-bold uppercase text-slate-500",children:[e.jsx("span",{children:"Artikulli"}),e.jsx("span",{children:"Çmimi"}),e.jsx("span",{children:"Total"})]}),r.length===0?e.jsxs("div",{className:"px-4 py-16 text-center text-slate-500",children:[e.jsx(xa,{className:"mx-auto mb-3 h-9 w-9"}),"Nuk ka artikuj në këtë porosi"]}):r.map((i,x)=>e.jsxs("div",{className:"pos-restaurant-order-row grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-3 border-b border-white/[.06] px-4 py-4",children:[e.jsxs("div",{children:[e.jsx("strong",{className:"block text-sm",children:i.name}),e.jsxs("span",{className:"mt-0.5 block text-[9px] text-slate-500",children:["ATK ",i.productCategory," · Njësia ",i.measurementUnit]}),e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[e.jsx("button",{onClick:()=>zt(i.id,-1),className:"rounded-md bg-white/5 p-1",children:e.jsx(za,{className:"h-3 w-3"})}),e.jsx("span",{className:"text-xs tabular-nums",children:Lr(i.quantity)}),e.jsx("button",{onClick:()=>zt(i.id,1),className:"rounded-md bg-white/5 p-1",children:e.jsx(Ir,{className:"h-3 w-3"})}),e.jsx("button",{type:"button",onClick:()=>a(C=>C.filter(_=>_.id!==i.id)),className:"ml-1 rounded-md bg-rose-500/10 p-1 text-rose-300 hover:bg-rose-500/20","aria-label":`Hiq ${i.name}`,children:e.jsx(cn,{className:"h-3 w-3"})}),e.jsx(Ya,{item:i,setCart:a,dark:!0}),e.jsxs("select",{value:Ze(i),onChange:C=>sr(_=>({..._,[i.id]:C.target.value})),className:"h-7 rounded-md border border-white/10 bg-[#09111d] px-1 text-[10px] text-slate-300","aria-label":`Stacioni për ${i.name}`,children:[e.jsx("option",{value:"kitchen",children:"Kuzhinë"}),e.jsx("option",{value:"bar",children:"Banak"})]})]})]}),e.jsxs("span",{className:"text-sm text-slate-400",children:[Lr(i.quantity)," ×"," ","€",wr(l.lines[x]?.grossUnitPriceAfterProductDiscount??bn(i))," ","me TVSH"]}),e.jsx("strong",{children:Ve(l.lines[x]?.total||0)})]},i.id))]}),Te[F]&&e.jsxs("div",{className:"mt-3 rounded-xl border border-amber-400/20 bg-amber-400/5 px-4 py-3 text-sm text-amber-100",children:[e.jsx("span",{className:"font-bold text-amber-300",children:"Shënim: "}),Te[F]]}),e.jsxs("div",{className:"mt-4 rounded-2xl border border-white/10 bg-[#0d1624] p-5",children:[e.jsxs("div",{className:"flex justify-between text-sm text-slate-400",children:[e.jsx("span",{children:"Nëntotali bruto"}),e.jsxs("span",{children:[l.grossSubtotal.toFixed(2)," €"]})]}),e.jsxs("div",{className:"mt-2 flex justify-between text-sm text-emerald-400",children:[e.jsx("span",{children:"Zbritje"}),e.jsxs("span",{children:["−",l.discountTotal.toFixed(2)," €"]})]}),e.jsxs("div",{className:"mt-2 flex justify-between text-sm text-slate-400",children:[e.jsx("span",{children:"Nëntotali pas zbritjes"}),e.jsxs("span",{children:[l.subtotal.toFixed(2)," €"]})]}),e.jsxs("div",{className:"mt-2 flex justify-between text-sm text-slate-400",children:[e.jsx("span",{children:"TVSH"}),e.jsxs("span",{children:[l.taxTotal.toFixed(2)," €"]})]}),e.jsxs("div",{className:"mt-5 flex items-end justify-between border-t border-white/10 pt-5",children:[e.jsx("strong",{children:"TOTALI"}),e.jsxs("strong",{className:"text-3xl text-blue-400",children:[l.total.toFixed(2)," €"]})]})]}),Qe==="payment"?e.jsxs("div",{className:"mt-4",children:[e.jsx("p",{className:"mb-3 text-sm font-bold text-slate-400",children:"Paguaj me"}),e.jsx($i,{total:l.total,manualDiscountPercent:o,setManualDiscountPercent:m,manualDiscountAmount:u,setManualDiscountAmount:s,paymentMethod:k,setPaymentMethod:Q,checkoutMode:Ke,setCheckoutMode:We,isSplitPayment:Fe,setIsSplitPayment:w,splitPayments:J,setSplitPayments:je,cashReceived:Ge,setCashReceived:Se,clients:Tt,selectedClientId:de,setSelectedClientId:ae,deliveryChoice:j,setDeliveryChoice:y,deliveryEmail:v,setDeliveryEmail:P,electronicReceiptConsent:N,setElectronicReceiptConsent:O,dark:!0}),e.jsx("button",{onClick:ce,disabled:!r.length||Y,className:"mt-4 flex h-16 w-full items-center justify-center rounded-xl bg-emerald-600 text-xl font-black hover:bg-emerald-500 disabled:opacity-40",children:Y?e.jsx(qt,{className:"animate-spin"}):e.jsxs(e.Fragment,{children:[Ke==="paid"?"PAGUAJ":"RUAJ BORXHIN",e.jsxs("span",{className:"ml-auto mr-5",children:[l.total.toFixed(2)," €"]})]})})]}):e.jsxs("div",{className:"pos-restaurant-order-actions mt-4 grid grid-cols-2 gap-2 sm:grid-cols-6",children:[e.jsxs("button",{onClick:async()=>{ue("kitchen"),await Lt("kitchen"),ue(null)},disabled:it!==null,className:"min-h-12 rounded-xl border border-orange-400/40 bg-orange-500/10 py-3 text-xs font-bold text-orange-200",children:[e.jsx(Mn,{className:"mr-1 inline h-4 w-4"})," Kuzhinë"]}),e.jsxs("button",{onClick:async()=>{ue("bar"),await Lt("bar"),ue(null)},disabled:it!==null,className:"min-h-12 rounded-xl border border-cyan-400/40 bg-cyan-500/10 py-3 text-xs font-bold text-cyan-200",children:[e.jsx(Mn,{className:"mr-1 inline h-4 w-4"})," Banak"]}),e.jsx("button",{onClick:Sr,disabled:it!==null||!r.length,className:"min-h-12 rounded-xl bg-indigo-600 py-3 text-xs font-bold hover:bg-indigo-500 disabled:opacity-40",children:it==="all"?e.jsx(qt,{className:"mx-auto animate-spin"}):"Dërgo porosinë"}),e.jsx("button",{onClick:Nt,className:"min-h-12 rounded-xl bg-orange-600 py-3 font-bold",children:"Mbaje"}),e.jsx("button",{onClick:()=>Xe("menu"),className:"rounded-xl bg-blue-600 py-4 font-bold",children:"+ Artikull"}),e.jsx("button",{onClick:()=>Xe("payment"),disabled:!r.length,className:"rounded-xl bg-emerald-600 py-4 text-lg font-black disabled:opacity-40",children:"PAGUAJ"})]})]})]}),e.jsxs("aside",{className:"pos-restaurant-details hidden border-l border-white/10 bg-[#0a111d] p-5 lg:block",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h2",{className:"font-bold",children:"Tavolinë e zgjedhur"}),e.jsx("button",{onClick:()=>Xe("tables"),"aria-label":"Mbyll panelin",className:"rounded-lg p-2 text-slate-500 hover:bg-white/5",children:e.jsx(Er,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"mt-5 flex items-center gap-3",children:[e.jsx("span",{className:I("grid h-11 w-11 place-items-center rounded-xl border font-black",Ks[dt.status]),children:dt.id}),e.jsxs("div",{children:[e.jsx("strong",{className:"text-sm",children:dt.zone.toUpperCase()}),e.jsxs("p",{className:"text-xs text-slate-500",children:[dt.seats," vende"]})]})]}),e.jsxs("div",{className:"mt-5 space-y-3 border-y border-white/10 py-5 text-sm text-slate-400",children:[e.jsxs("p",{children:["◷ Ora e hapjes: ",dt.time||"--:--"]}),e.jsx("p",{children:"♙ Klienti: Klient i përgjithshëm"})]}),e.jsxs("div",{className:"flex items-center justify-between py-5",children:[e.jsx("span",{className:"text-sm text-slate-500",children:"Shuma totale"}),e.jsxs("strong",{className:"text-xl text-orange-400",children:[l.total?l.total.toFixed(2):(dt.total||0).toFixed(2)," €"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("button",{onClick:()=>xt("edit",H.find(i=>i.id===F)),className:"h-11 w-full rounded-lg border border-blue-400/30 bg-blue-500/10 text-sm font-bold text-blue-200",children:[e.jsx(ea,{className:"mr-2 inline h-4 w-4"})," Ndrysho tavolinën"]}),e.jsx("button",{onClick:()=>Xe("menu"),className:"h-11 w-full rounded-lg bg-blue-600 font-bold hover:bg-blue-500",children:"Hap porosi"}),e.jsx("button",{onClick:()=>Xe("order"),className:"h-11 w-full rounded-lg border border-white/10 bg-white/[.03] text-sm",children:"Shiko porosinë"}),e.jsx("button",{onClick:()=>h("transfer"),className:"h-11 w-full rounded-lg border border-white/10 bg-white/[.03] text-sm",children:"Transfero / Bashko"}),e.jsx("button",{onClick:()=>{L(Te[F]||""),h("note")},className:"h-11 w-full rounded-lg border border-white/10 bg-white/[.03] text-sm",children:"Shto shënim"}),e.jsx("button",{onClick:()=>r.length?Xe("payment"):bt(i=>i.map(x=>x.id===F?{...x,status:"free",total:void 0}:x)),className:"h-11 w-full rounded-lg border border-red-500/30 bg-red-500/5 text-sm text-red-400",children:"Mbyll tavolinën"})]})]})]}),e.jsx("nav",{className:"pos-restaurant-mobile-nav fixed inset-x-0 bottom-0 z-40 grid grid-cols-4 border-t border-white/10 bg-[#09111d]/95 px-2 pb-[max(.5rem,env(safe-area-inset-bottom))] pt-2 backdrop-blur-xl lg:hidden",children:[[fa,"Tavolinat","tables"],[$r,"Porositë","order"],[pn,"Menu","menu"],[Fn,"Më shumë","more"]].map(([i,x,C])=>e.jsxs("button",{onClick:()=>C==="more"?h("more"):Xe(C),className:I("flex flex-col items-center gap-1 py-1 text-[11px]",Qe===C?"text-blue-400":"text-slate-500"),children:[e.jsx(i,{className:"h-5 w-5"}),String(x)]},String(x)))}),kt!=="none"&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-end bg-black/60 p-3 backdrop-blur-sm lg:items-center lg:justify-center",onClick:()=>h("none"),children:e.jsxs("div",{className:"w-full rounded-3xl border border-white/10 bg-[#101a28] p-5 shadow-2xl lg:max-w-md",onClick:i=>i.stopPropagation(),children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[e.jsx("h3",{className:"text-lg font-black",children:kt==="table"?Ce?`Ndrysho tavolinën · ${Ce}`:"Shto tavolinë":kt==="note"?`Shënim · ${F}`:kt==="transfer"?"Transfero porosinë":kt==="printers"?"Printerët e punës":"Veprime të shpejta"}),e.jsx("button",{onClick:()=>h("none"),className:"min-h-11 min-w-11 rounded-xl bg-white/5","aria-label":"Mbyll",children:e.jsx(Er,{className:"mx-auto h-5 w-5"})})]}),kt==="table"&&e.jsxs("form",{onSubmit:ot,className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start gap-3 rounded-2xl border border-blue-400/20 bg-blue-500/10 p-3 text-sm text-blue-100",children:[e.jsx(ta,{className:"mt-0.5 h-5 w-5 shrink-0 text-blue-300"}),e.jsxs("p",{children:["Përdor një emër të shkurtër që shihet qartë nga kamarieri, p.sh."," ",e.jsx("strong",{children:"T1"}),", ",e.jsx("strong",{children:"Taraca-1"})," ose ",e.jsx("strong",{children:"VIP A"}),"."]})]}),e.jsxs("label",{className:"block space-y-2 text-sm font-bold",children:["Emërtimi i tavolinës",e.jsx("input",{autoFocus:!0,value:Rt,onChange:i=>vt(i.target.value),maxLength:32,className:"h-12 w-full rounded-xl border border-white/10 bg-[#09111d] px-3 font-normal outline-none focus:border-blue-400",placeholder:"p.sh. T1"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("label",{className:"block space-y-2 text-sm font-bold",children:["Vende",e.jsx("input",{type:"number",min:"1",max:"100",step:"1",value:jt,onChange:i=>_t(i.target.value),className:"h-12 w-full rounded-xl border border-white/10 bg-[#09111d] px-3 font-normal outline-none focus:border-blue-400"})]}),e.jsxs("label",{className:"block space-y-2 text-sm font-bold",children:["Zona",e.jsxs("select",{value:Ot,onChange:i=>V(i.target.value),className:"h-12 w-full rounded-xl border border-white/10 bg-[#09111d] px-3 font-normal outline-none focus:border-blue-400",children:[e.jsx("option",{value:"Brenda",children:"Brenda"}),e.jsx("option",{value:"Tarraca",children:"Tarracë"}),e.jsx("option",{value:"VIP",children:"VIP"})]})]})]}),e.jsxs("label",{className:"block space-y-2 text-sm font-bold",children:["Statusi fillestar",e.jsxs("select",{value:yt,onChange:i=>he(i.target.value),className:"h-12 w-full rounded-xl border border-white/10 bg-[#09111d] px-3 font-normal outline-none focus:border-blue-400",children:[e.jsx("option",{value:"free",children:"E lirë"}),e.jsx("option",{value:"reserved",children:"E rezervuar"}),e.jsx("option",{value:"cleaning",children:"Pastrohet"}),e.jsx("option",{value:"occupied",disabled:!Le[Ce||""]?.length,children:"E zënë nga porosia aktive"})]})]}),e.jsxs("div",{className:I("grid gap-2 pt-1",Ce?"grid-cols-3":"grid-cols-2"),children:[Ce&&e.jsxs("button",{type:"button",onClick:()=>q(Ce),className:"min-h-12 rounded-xl border border-red-400/30 bg-red-500/10 font-bold text-red-200",children:[e.jsx(cn,{className:"mr-1 inline h-4 w-4"})," Hiq"]}),e.jsx("button",{type:"button",onClick:()=>h("none"),className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold",children:"Anulo"}),e.jsx("button",{type:"submit",disabled:Kt,className:"min-h-12 rounded-xl bg-blue-600 font-bold disabled:opacity-50",children:Kt?e.jsx(qt,{className:"mx-auto h-5 w-5 animate-spin"}):e.jsxs(e.Fragment,{children:[e.jsx(vo,{className:"mr-2 inline h-4 w-4"})," Ruaj"]})})]})]}),kt==="note"&&e.jsxs(e.Fragment,{children:[e.jsx("textarea",{value:z,onChange:i=>L(i.target.value),rows:4,className:"w-full rounded-xl border border-white/10 bg-[#09111d] p-3 outline-none",placeholder:"P.sh. pa qepë, alergji..."}),e.jsx("button",{onClick:()=>{Ct(i=>({...i,[F]:z.trim()})),h("none"),f.success("Shënimi u ruajt.")},className:"mt-3 min-h-12 w-full rounded-xl bg-blue-600 font-bold",children:"Ruaj shënimin"})]}),kt==="transfer"&&e.jsx("div",{className:"grid grid-cols-3 gap-2",children:H.filter(i=>i.id!==F&&i.status==="free").map(i=>e.jsx("button",{onClick:()=>
2Ye(i.id),className:"min-h-14 rounded-xl border border-white/10 bg-white/5 font-bold hover:bg-blue-600",children:i.id},i.id))}),kt==="printers"&&e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-slate-400",children:"Cakto printerin ku dërgohet kuponi jo-fiskal i përgatitjes. Në shfletues përdoret dialogu standard i printimit."}),["kitchen","bar"].map(i=>e.jsxs("label",{className:"block space-y-2 text-sm font-bold",children:[i==="kitchen"?"Kuzhinë":"Banak",e.jsxs("select",{value:Me[i]||"",onChange:x=>Be(C=>({...C,[i]:x.target.value})),className:"h-11 w-full rounded-xl border border-white/10 bg-[#09111d] px-3 font-normal",children:[e.jsx("option",{value:"",children:"Printeri default"}),G.map(x=>e.jsxs("option",{value:x.name,children:[x.name,x.isDefault?" · default":""]},x.name))]})]},i)),!G.length&&e.jsx("p",{className:"rounded-xl border border-amber-400/20 bg-amber-400/5 p-3 text-xs text-amber-200",children:"Lista e printerëve lokalë është e disponueshme vetëm në aplikacionin desktop. Në web do të hapet printimi standard."}),e.jsx("button",{onClick:()=>h("none"),className:"min-h-12 w-full rounded-xl bg-blue-600 font-bold",children:"Ruaj konfigurimin"})]}),kt==="more"&&e.jsxs("div",{className:"grid gap-2",children:[e.jsx("button",{onClick:()=>{h("none"),pe("return")},className:"min-h-12 rounded-xl border border-amber-400/30 bg-amber-400/5 font-bold text-amber-200",children:"Kthim fiskal"}),e.jsx("button",{onClick:()=>{h("none"),pe("void")},className:"min-h-12 rounded-xl border border-red-400/30 bg-red-400/5 font-bold text-red-200",children:"Anulim fiskal"}),e.jsxs("button",{onClick:()=>xt("create"),className:"min-h-12 rounded-xl bg-blue-600 font-bold",children:[e.jsx(Ir,{className:"mr-2 inline h-4 w-4"})," Shto tavolinë"]}),e.jsxs("button",{onClick:()=>xt("edit",H.find(i=>i.id===F)),disabled:!H.length,className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold disabled:opacity-40",children:[e.jsx(ea,{className:"mr-2 inline h-4 w-4"})," Ndrysho tavolinën"]}),e.jsx("button",{onClick:Nt,className:"min-h-12 rounded-xl bg-orange-600 font-bold",children:"Mbaje porosinë"}),e.jsx("button",{onClick:()=>{L(Te[F]||""),h("note")},className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold",children:"Shto shënim"}),e.jsx("button",{onClick:()=>h("transfer"),className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold",children:"Transfero tavolinën"}),e.jsx("button",{onClick:()=>h("printers"),className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold",children:"Konfiguro printerët e punës"}),e.jsx("button",{onClick:ze,className:"min-h-12 rounded-xl border border-white/10 bg-white/5 font-bold",children:"Menaxho produktet"})]})]})}),e.jsx(zn,{open:nr!==null,onOpenChange:i=>{i||pe(null)},companyId:Z,mode:nr||"return"})]})}const Cd=5e3,Pd=1e4,Td=921420544263;function Id({units:t,value:r,onChange:n}){return t.length<2?null:e.jsxs("div",{className:"pos-fiscal-unit-selector hidden items-center gap-2 rounded-2xl border border-border/60 bg-muted/30 px-2 py-1.5 lg:flex",children:[e.jsx("span",{className:"whitespace-nowrap text-[10px] font-bold uppercase tracking-tight text-muted-foreground",children:"POS fiskal"}),e.jsxs($t,{value:r||"automatic",onValueChange:n,children:[e.jsx(Vt,{className:"h-7 w-[185px] rounded-xl border-0 bg-transparent px-2 text-xs font-semibold shadow-none focus:ring-0",children:e.jsx(Ht,{placeholder:"Zgjidh POS"})}),e.jsxs(Wt,{children:[e.jsx(Oe,{value:"automatic",children:"Automatik (default)"}),t.map(a=>e.jsxs(Oe,{value:a.id,children:[a.name||a.unit_code," · B",a.sef_branch_id||"?"," / POS"," ",a.sef_pos_id||"?"]},a.id))]})]})]})}const Dd=async t=>{const r=new AbortController;let n=null;const a=new Promise((l,o)=>{n=window.setTimeout(()=>{r.abort(),o(new Error("POS request timed out"))},Cd)});try{return await Promise.race([t(r.signal),a])}finally{n&&window.clearTimeout(n)}},Ad=()=>{const{company:t}=ii(),{locale:r,t:n}=Js(),{user:a,session:l}=ul(),{role:o,canOperatePos:m}=oi(),u=li(),s=Fa(),{createInvoice:j,useNextInvoiceNumber:y}=di(),{recordPayment:v}=ui(),{sendEmail:P}=Ki();Kl();const N=ei(),O=qa(),[B,$]=Ma(),b=t?.id,{data:Y}=Kr({queryKey:["pos-vat-profile",b],enabled:!!b,staleTime:6e4,queryFn:()=>si(b)}),ce=Y?Ys(Y):!!String(t?.vat_number||"").trim(),k=t,Q=!!(a?.id&&l?.user?.id===a.id),Ke=!!a?.app_metadata?.offline&&!Q,We=Q,Fe=Q?`online:${a?.id}`:Ke?`offline:${a?.id}`:"unauthenticated",w=N.isOnline?"network-online":"network-offline",{data:J=[]}=Kr({queryKey:["pos-fiscal-units",b],enabled:!!b,staleTime:6e4,queryFn:async()=>
2{if(!b)return[];const{data:c,error:p}=await ee.from("fiscal_business_units").select("id,name,unit_code,sef_branch_id,sef_pos_id,sef_fiscalization_no").eq("company_id",b).eq("is_active",!0).order("created_at");if(p)throw p;return c||[]}}),[,je]=d.useState(0),Ge=ci(b),Se=Kn(t?.effectiveBusinessCategory),Tt=Kn(B.get("category")),et=o==="staff"||o==="invoice_admin",de=et?Se:B.get("category")?Tt:Se,ae=wl(de),ze=Ei(ae.value),Z=ml(ae.value),Re=ud[ae.value],E=o==="owner"||o==="invoice_admin"||o==="accountant"||o==="manager",at=d.useMemo(()=>J,[J]),gt=d.useMemo(()=>Ge?.businessUnitId?Ge.businessUnitId:t?.businessUnitId?t.businessUnitId:"automatic",[t?.businessUnitId,Ge?.businessUnitId]),er=d.useCallback(c=>{if(!b||!E)return;if(c==="automatic"){pl(b),je(D=>D+1),f.success("POS fiskal u kthye në zgjedhjen automatike të llogarisë.");return}const p=at.find(D=>D.id===c);p&&(Sa(b,{businessUnitId:p.id,branchId:p.sef_branch_id||void 0,posId:p.sef_pos_id||void 0,sefId:p.sef_fiscalization_no||void 0}),je(D=>D+1),f.success(`Kjo pajisje tani përdor ${p.name} · POS ${p.sef_pos_id||"?"}.`),da(b,{fallback:{businessUnitId:p.id,businessUnitCode:p.unit_code||void 0,branchId:p.sef_branch_id||void 0,posId:p.sef_pos_id||void 0,sefId:p.sef_fiscalization_no||void 0,environment:mn(k?.fiscal_environment)}}).then(async D=>{!D.businessUnitId||At()||await Cn(b,{businessNui:Number(k?.sef_nui_numeric||k?.nui||k?.fiscal_number||0),context:D})}).catch(D=>console.warn("[POS] physical POS binding deferred:",D)))},[E,b,k,at]),fr=E?e.jsx(Id,{units:at,value:gt,onChange:er}):null,Qe=Wl({businessCategory:ae.value,customerProfile:k?.customer_profile,invoiceCustomerPolicy:k?.invoice_customer_policy,publicCustomerLabel:k?.public_customer_label}),[Xe,tr]=d.useState(""),rr=zl(Xe,300),[gr,F]=d.useState(""),Et=d.useRef(null),pt=d.useRef({value:"",startedAt:0,lastKeyAt:0}),[It,nr]=d.useState("Të gjitha"),[pe,Ce]=d.useState(Qe.defaultClientSelection),[Pe,Rt]=d.useState("paper"),[vt,jt]=d.useState(""),[_t,Ot]=d.useState(!1),[V,yt]=d.useState("cash"),[he,Kt]=d.useState(0),[tt,St]=d.useState(0),[Gt,ar]=d.useState(""),[ht,Le]=d.useState(!1),[se,H]=d.useState([{method:"cash",amount:""}]),[bt,Te]=d.useState(""),Ct="fiscal",[ye,sr]=d.useState("paid"),[kt,h]=d.useState(!1),[z,L]=d.useState(!1),[A,g]=d.useState([]),[G,ie]=d.useState([]),[Me,Be]=d.useState(!1),[st,ke]=d.useState(null),[it,ue]=d.useState(!1),[Qt,mr]=d.useState(!1),[Pr,Hr]=d.useState(!1),[Wr,ne]=d.useState(null),ir=d.useRef(b||null),dt=d.useRef(new Set),vr=d.useRef(new Set),ut=d.useRef(null),Dt=d.useRef(!1),Xt=d.useRef(new Map),{data:zt}=y();d.useEffect(()=>{const c=ir.current;c&&c!==b&&(g([]),ie([]),Ce(Qe.defaultClientSelection),Kt(0),St(0),ar(""),Le(!1),H([{method:"cash",amount:""}]),Te(""),sr("paid"),ut.current=null,Dt.current=!1),ir.current=b||null},[b,Qe.defaultClientSelection]),d.useEffect(()=>{!Y||ce||(g(c=>c.map(p=>({...p,taxRate:0,vatNorm:"A"}))),ie(c=>c.map(p=>({...p,taxRate:0,vatNorm:"A"}))))},[ce,Y]),d.useEffect(()=>{const c=Xt.current;return()=>{c.forEach(p=>p.abort()),c.clear()}},[]),d.useEffect(()=>{if(!b||At())return;let c=!1,p=!1;const D=async()=>{if(c||p)return;const W={businessUnitId:String(k?.businessUnitId||k?.fiscal_business_unit_id||"")||void 0,businessUnitCode:String(k?.business_unit_code||"").trim()||void 0,operatorId:String(k?.fiscal_operator_id||"")||void 0,operatorName:String(k?.operator_name||k?.operatorName||"")||void 0,businessNui:Number(k?.sef_nui_numeric||k?.nui||k?.fiscal_number||0)||void 0,branchId:Number(k?.sef_branch_id||0)||void 0,posId:Number(k?.sef_default_pos_id||0)||void 0,environment:mn(k?.fiscal_environment)},U=await da(b,{fallback:W});if(c||!U.businessUnitId)return;const me=Number(k?.sef_nui_numeric||k?.nui||k?.fiscal_number||0);!await Cn(b,{businessNui:me>0?me:0,onError:$e=>{fs($e)&&(p=!0,console.warn("[POS Offline] ATK refuzoi regjistrimin aktual të POS-it (HTTP 404); provisionimi në sfond u ndal derisa të korrigjohet identiteti ose të provohet shprehimisht përsëri."))},context:U})&&!c&&!p&&console.warn("[POS Offline] Çelësi lokal nuk u verifikua pas provisioning-ut.")},S=W=>{if(fs(W)){p=!0,console.warn("[POS Offline] ATK refuzoi regjistrimin aktual të POS-it (HTTP 404);
2 provisionimi në sfond u ndal derisa të korrigjohet identiteti ose të provohet shprehimisht përsëri.");return}console.warn("[POS Offline] Përgatitja lokale u shty:",W)};D().catch(S);const T=()=>{D().catch(S)};return window.addEventListener("online",T),()=>{c=!0,window.removeEventListener("online",T)}},[b,k]),d.useEffect(()=>{if(!b)return;const c=()=>{if(At()){ya();return}Sn()};c();const p=()=>void Sn(),D=()=>{document.visibilityState==="visible"&&c()};return window.addEventListener("online",p),document.addEventListener("visibilitychange",D),()=>{window.removeEventListener("online",p),document.removeEventListener("visibilitychange",D)}},[b]),d.useEffect(()=>{if(!b)return;let c=!1;const p=()=>{if(Cl())try{const T=ka();if(T.warning){const W=wa(T);c||ne(W),Na(b,T)}else c||ne(null)}catch{}},D=window.setTimeout(p,1500),S=window.setInterval(p,6e4);return()=>{c=!0,window.clearTimeout(D),window.clearInterval(S)}},[b]);const or=()=>{if(A.length){ie(A),g([]),ut.current=null,f.success("Shporta u mbajt për rikthim.");return}if(G.length){g(G),ie([]),f.success("Shporta e mbajtur u rikthye.");return}f.info("Nuk ka shportë të hapur ose të mbajtur.")},Ie=d.useCallback(async(c,p)=>{if(!t)return!1;const D=me=>new Promise(Ne=>window.setTimeout(Ne,me)),{error:S}=await ee.rpc("sync_admin_invoice_fiscal_coupon",{p_invoice_id:c});S&&console.warn("[POS auto-print] Coupon bridge sync reported an error:",S);try{const{awaitFiscalQrForInvoice:me}=await Ji(async()=>{const{awaitFiscalQrForInvoice:Ne}=await import("./index-CzDHRh-U.js").then($e=>$e.eQ);return{awaitFiscalQrForInvoice:Ne}},__vite__mapDeps([0,1,2,3,4,5]));await me(c,12e3)}catch{}const T="*, fiscal_coupon_items(*), fiscal_business_units(name, address, unit_code, vehicle_plate_number), fiscal_operators(name, operator_code)",{data:W}=await ee.from("invoices").select("delivery_evidence").eq("company_id",t.id).eq("id",c).maybeSingle(),U=W?.delivery_evidence;for(let me=0;me<20;me+=1){const{data:Ne,error:$e}=await ee.from("fiscal_coupons").select(T).eq("company_id",t.id).eq("invoice_id",c).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(!$e&&Ne){const{data:Je,error:jr}=await ee.from("invoice_items").select("id, product_name, quantity, price, tax_rate, total").eq("invoice_id",c).eq("company_id",t.id);jr&&console.warn("[POS auto-print] Invoice items are not ready:",jr),Ne.invoice_items=Je||[];const Rr=_n(t?.fiscal_settings||{}),Xr=Ui(Ne,t,U);if(ti(Xr)){const Zr=await Ia(Xr,t),Tr=await In(Zr,{companyName:t.name||"Kompania",companyNui:t.nui||void 0,companyFiscalNumber:t?.fiscal_number||void 0,companyTvshNumber:t?.tvsh_number||void 0,companyLogoUrl:t.logo_url||void 0,format:Rr,isCopy:!1,language:r}),ft=Ar();return await Da(Tr,{preparedWindow:p,printerWidth:Rr==="thermal_58mm"?58:80,silent:ft,noDialogFallback:la()})}}else $e&&console.warn("[POS auto-print] Fiscal coupon is not readable yet:",$e);me===4&&await ee.rpc("sync_admin_invoice_fiscal_coupon",{p_invoice_id:c}),me<19&&await D(500)}return console.warn("[POS auto-print] Timed out waiting for a printable fiscal coupon:",c),!1},[t,r]),xt=d.useCallback(async c=>{if(c.choice!=="paper"&&!vr.current.has(c.invoiceId)){vr.current.add(c.invoiceId);try{const p=await Ia(c.coupon,t);if(!Dr(p))throw new Error("Kuponi fiskal nuk ka CitizenCoupon QR të vlefshëm.");const S=_n(t?.fiscal_settings||{}),T=await In(p,{companyName:t?.name||"Kompania",companyNui:t?.nui||void 0,companyFiscalNumber:t?.fiscal_number||void 0,companyTvshNumber:t?.tvsh_number||void 0,companyLogoUrl:t?.logo_url||void 0,format:S,isCopy:!1,language:r});if(c.choice==="without_paper"){const Ne=nc(T,Tn(p.couponNumber,r));f.success(Ne==="downloaded"?"Shkarkimi i PDF-së së kuponit fiskal u nis; printeri nuk u përdor.":"PDF-ja e kuponit fiskal u hap për ruajtje; printeri nuk u përdor.");return}const W=String(c.recipientEmail||"").trim();if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(W))throw new Error("Email-i i klientit nuk është i vlefshëm.");const U=mi(r,{couponNumber:p.couponNumber,companyName:t?.name||"Kompania",recipientName:c.recipientName,amount:Number(p.grandTotal||0)});if(!await P({type:"invoice",recipientEmail:W,recipientName:c.recipientName||U.customerFallback,companyName:t?.name||"Kompania",companyId:t?.id,companyEmail:t?.email||void 0,invoiceNumber:p.couponNumber,invoiceId:c.invoiceId,invoiceDate:p.createdAt,amount:Number(p.grandTotal||0),pdfBase64:await bi(T),idempotencyKey:`fiscal-coupon-email:${c.invoiceId}:${W.toLowerCase()}`,customSubject:U.subject,customMessage:U.shortMessage,documentKind:"fiscal_coupon",documentLanguage:r,pdfFilename:Tn(p.couponNumber,r)}))throw new Error("Email-i nuk u pranua për dërgim.")}catch(p){f.error(`Dorëzimi elektronik dështoi: ${p instanceof Error?p.message:String(p)}`)}finally{vr.current.delete(c.invoiceId)}}},[t,r,P]),ot=d.useCallback(async c=>{if(c.choice==="paper")return;const p=await Ln(c.invoiceId,t,{requireAtkProof:!0,waitForCouponMs:12e3,includePrintMetadata:!0});if(!p){f.warning("Dorëzimi elektronik u ndal: kuponi fiskal nuk ka ende provë të plotë të pranimit nga ATK ose CitizenCoupon QR.",{description:"Kuponi u ruajt lokalisht/ në sistem. Nuk u dërgua email dhe nuk u hap preview pa QR; provo përsëri pas sinkronizimit.",duration:1e4});return}await xt({invoiceId:c.invoiceId,coupon:p,choice:c.choice,recipientEmail:c.recipientEmail,recipientName:c.recipientName})},[t,xt]),{data:q,isLoading:Ze,isFetching:Pt,error:Zt,refetch:Lt}=Kr({queryKey:["pos-workspace-v3",b,ae.value,Fe,w],queryFn:async()=>
2{if(!b)return null;const c=new Date;c.setHours(0,0,0,0);const p=c.toISOString(),D=async(T={})=>{if(!We||!a?.id)throw new Error("POS remote refresh is unavailable without a matching auth session.");await Dl(a.id,l);const W=t?.inventory_enabled===!0;W&&We&&ee.rpc("sync_all_catalog_products_to_inventory",{_company_id:b}).then(({error:Ut})=>{Ut&&!Nr(Ut)&&console.warn("[POS] inventory catalogue sync deferred:",Ut)}).catch(Ut=>{Nr(Ut)||console.warn("[POS] inventory catalogue sync deferred:",Ut)});const U=await Al(b,W,{allowPartial:!0}),[me,Ne,$e]=await Promise.all([ca(ee.from("invoices").select("id, invoice_number, grand_total, status, created_at").eq("company_id",b).order("created_at",{ascending:!1}).limit(40),T.invoices||[],"invoices"),ca(ee.from("payments").select("id, amount, method, created_at").eq("company_id",b).order("created_at",{ascending:!1}).limit(30),T.payments||[],"payments"),ca(ee.from("invoices").select("grand_total, status").eq("company_id",b).gte("created_at",p),[],"today POS totals")]),Je=$e.data||[],jr=$e.error&&T.todayMetrics?T.todayMetrics.todayRevenue:Je.reduce((Ut,Fr)=>Ut+Number(Fr.grand_total||0),0),Rr=$e.error&&T.todayMetrics?T.todayMetrics.todayInvoices:Je.length,Xr=U.optionalFailures.includes("clients")&&T.clients||U.clients,Zr=U.optionalFailures.includes("POS categories")&&T.posCategories||U.posCategories,Tr=U.optionalFailures.includes("inventory")&&T.inventoryProducts||U.inventoryProducts,ft=U.optionalFailures.includes("inventory")&&T.inventoryStock||U.inventoryStock,Or={products:U.products||[],invoices:me.data||[],payments:Ne.data||[],clients:Xr||[],posCategories:Zr||[],inventoryEnabled:W,inventoryProducts:Tr||[],inventoryStock:ft||[],todayMetrics:{todayRevenue:jr,todayInvoices:Rr},offlineCategoryCoverage:U.offlineCategoryCoverage,offlinePackageVersion:U.offlinePackageVersion,offlinePreparedAt:U.offlinePreparedAt};xd(b,t);try{await qr(b,"pos-workspace",Or)}catch(Ut){console.warn("[POS] workspace checkpoint deferred:",Ut)}return Or},S=await Ta(b,"pos-workspace");if(S){const T=await gs(b,S),W=Array.isArray(T.products)&&T.products.length>0;if(We&&W)D(T).then(U=>s.setQueryData(["pos-workspace-v3",b,ae.value,Fe,w],U)).catch(U=>console.warn("[POS] background refresh deferred:",U));else if(We)try{return await Promise.race([D(T),new Promise((U,me)=>setTimeout(()=>me(new Error("POS workspace timed out")),12e3))])}catch(U){if(console.warn("[POS] foreground refresh of empty checkpoint deferred:",U),Q)throw U}return T}if(!We)return{products:[],invoices:[],payments:[],clients:[],posCategories:[],inventoryEnabled:t?.inventory_enabled===!0,inventoryProducts:[],inventoryStock:[],todayMetrics:{todayRevenue:0,todayInvoices:0}};try{return await Promise.race([D(),new Promise((T,W)=>setTimeout(()=>W(new Error("POS workspace timed out")),12e3))])}catch(T){const W=await Ta(b,"pos-workspace");if(W)return gs(b,W);if(Nr(T)||Q)throw T;return console.warn("[POS] workspace load failed:",T),{products:[],invoices:[],payments:[],clients:[],posCategories:[],inventoryEnabled:t?.inventory_enabled===!0,inventoryProducts:[],inventoryStock:[],todayMetrics:{todayRevenue:0,todayInvoices:0}}}},enabled:!!b&&!!a?.id,staleTime:3e4,retry:1,placeholderData:c=>c});d.useEffect(()=>{const c=q?.clients.find(p=>p.id===pe);jt(c?.email||"")},[q?.clients,pe]);const Sr=Q?"Të dhënat e këtij biznesi nuk u ngarkuan. Provo përsëri.":"Sesioni i biznesit ende nuk është gati. Provo përsëri pas pak.",xe=d.useMemo(()=>{const c=q?.products||[],p=new Map((q?.posCategories||[]).map(T=>[T.id,T.name])),D=new Map((q?.inventoryProducts||[]).filter(T=>T.catalog_product_id).map(T=>[T.catalog_product_id,T])),S=new Map((q?.inventoryStock||[]).map(T=>[T.product_id,Number(T.current_quantity||0)]));return c.map((T,W)=>{const U=["emerald","blue","amber","rose","violet","cyan","orange","sky","pink"],me=D.get(T.id),Ne=q?.inventoryEnabled===!0&&(me?.track_stock??!0),$e=q?.inventoryEnabled?me?S.get(me.id)??0:0:void 0;return{id:T.id,name:T.name,description:T.description||"Artikull operativ",sku:T.sku||null,price:Number(T.price||0),fiscalPrice:String(T.price??"0"),taxRate:ce?Number(T.tax_rate??18):0,vatNorm:ce?Ns(T.vat_norm,T.tax_rate,"A"):"A",discountPercent:Nn(T),discountPercentExact:He(String(Nn(T)),4),measurementUnit:String(T.measurement_unit_code||"EA"),productCategory:String(T.atk_category_code||"TT"),barcode:T.barcode,tab:p.get(T.pos_category_id||"")||"Të gjitha",badge:T.barcode?"Gati për Barcode":"Manual",stockLabel:q?.inventoryEnabled?`Stok: ${$e??0}`:ce?`TVSH ${Number(T.tax_rate??18)}%`:"Jashtë TVSH-së",accent:U[W%U.length],sourceProductId:T.id,inventoryProductId:me?.id||null,stockQuantity:$e,stockTracked:Ne}})},[q?.products,q?.posCategories,q?.inventoryEnabled,q?.inventoryProducts,q?.inventoryStock,ce]),Nt=(q?.posCategories?.length||0)>0,Ye=d.useMemo(()=>Nt?["Të gjitha",...(q?.posCategories||[]).map(c=>c.name)]:["Të gjitha",...Re.tabs.filter(c=>c!=="Të gjitha")],[q?.posCategories,Re.tabs,Nt]),i=ze.presentation==="barcode-first",x=d.useMemo(()=>{const c=Jt(rr.trim());return xe.filter(p=>It!=="Të gjitha"&&!(Nt?p.tab===It:It==="Të tjera"?Mi(Ye,p.name,p.description):Qa(It,p.name,p.description))?!1:c?Jt(p.name).includes(c)||p.barcode&&p.barcode.includes(c):!0)},[It,xe,rr,Ye,Nt]),C=d.useCallback(c=>{const p=Dc(ae.value,c);if(p.kind!=="sale"){if(p.kind==="client"){h(!0);return}O(p.href)}},[ae.value,O]),_=d.useMemo(()=>{const c=Ga(he);return{...$n(A,{subtotalDiscountPercent:tt>.005?0:c,subtotalDiscountAmount:tt>.005?tt:void 0})}},[A,tt,he]),re=d.useMemo(()=>{const c={A:0,C:0,D:0,E:0};return A.forEach((p,D)=>{const S=p.vatNorm;S in c&&(c[S]=Oi(c[S]+Number(_.lines[D]?.taxTotal||0)))}),c},[A,_.lines]),qe=d.useRef(_.total);d.useEffect(()=>{const c=qe.current,p=se.reduce((D,S)=>D+(Number(S.amount)||0),0);if(ht&&se.length>0&&Math.abs(p-c)<.01&&Math.abs(_.total-c)>.001){const D=_.total-p;H(S=>{if(!S.length)return S;const T=S.length-1;return S.map((W,U)=>U===T?{...W,amount:Math.max(0,(Number(W.amount)||0)+D).toFixed(2)}:W)})}qe.current=_.total},[_.total,ht,H,se]);const wt=d.useMemo(()=>{const c=q?.todayMetrics||{todayRevenue:0,todayInvoices:0},D=(q?.invoices||[]).filter(S=>S.status==="pending"||S.status==="overdue").length;return{...c,pendingCount:D}},[q?.todayMetrics,q?.invoices]),Ft=ae.value==="hotel_motel",be=d.useCallback(async()=>
2{if(!Z.sef||!Z.offline||!Z.idempotency){f.error("Ky POS nuk është konfiguruar me kontratën fiskale enterprise.");return}if(!m){f.error("Nuk keni leje për të përfunduar shitje në POS.");return}if(A.length===0){f.error("Shtoni të paktën një produkt para pagesës.");return}if(!b){f.error("Kompania nuk është ngarkuar. Rifreskoni faqen dhe provoni përsëri.");return}if(t?.inventory_enabled===!0){const R=A.find(M=>M.stockTracked===!0&&M.stockQuantity!=null&&M.quantity>M.stockQuantity);if(R){f.error(`Stok i pamjaftueshëm për "${R.name}". Gjendja: ${R.stockQuantity??0}.`);return}if(!At()){const{data:M,error:we}=await ee.rpc("inventory_current_stock",{_company_id:b});if(we){if(!Nr(we)){f.error(`Kontrolli i stokut dështoi: ${we.message}`);return}}else{const _e=new Map((M||[]).map(Ae=>[Ae.product_id,Number(Ae.current_quantity||0)])),De=A.find(Ae=>Ae.stockTracked===!0&&(!Ae.inventoryProductId||Number(_e.get(Ae.inventoryProductId)||0)<Ae.quantity));if(De){f.error(`Stok i pamjaftueshëm për "${De.name}". Shitja nuk u krijua.`);return}}}}if(ut.current?.inFlight||Dt.current)return;const c=Kc(ut.current,A,vd);ut.current=zc(c),mr(!0),Dt.current=!0;const p=()=>{const R=ut.current;R?.key===c.key&&(ut.current=Lc(R)),mr(!1),Dt.current=!1},D=()=>{ut.current=null,mr(!1),Dt.current=!1},S=c.key,T=hl({total:_.total,mode:ye,method:V,split:ht,drafts:se});if(T.error){p(),f.error(T.error);return}const W=T.payments,U=q?.clients.find(R=>R.id===pe);let me=U?.name||"Klient",Ne=vt.trim();if(Ne||(Ne=String(U?.email||"").trim()),Pe!=="paper"){if(ye!=="paid"){p(),f.error("Dorëzimi elektronik ofrohet vetëm pasi pagesa të jetë përfunduar.");return}if(!bl(W)){p(),f.error("Për pagesë me para në dorë, kuponi fiskal duhet të dorëzohet në letër. Zgjidhni vetëm pagesë pa para në dorë për dorëzim elektronik.");return}if(!_t){p(),f.error("Për dorëzim elektronik duhet pajtimi i klientit.");return}if(Pe==="email"&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(Ne)){p(),f.error("Vendosni një email të vlefshëm për klientin.");return}}if(ye==="pending"&&pe==="walk-in"){p(),f.error("Për shitje me borxh duhet të zgjidhni një klient.");return}const $e=W.filter(R=>R.method==="cash").reduce((R,M)=>R+M.amount,0),Je=Number(bt)||0,jr=ye==="paid"&&$e>0&&Je>0?Math.max(Je,$e):void 0,Rr=jr!=null?Number((jr-$e).toFixed(2)):void 0,Xr=ye==="paid"&&$e>0&&jr!=null?{cashDue:Number($e.toFixed(2)),cashTendered:Number(jr.toFixed(2)),changeDue:Number((Rr||0).toFixed(2))}:null;if(ye==="paid"&&$e>0&&Je>0&&Je+.01<$e){p(),f.error(`Të hollat e pranuara (€${Je.toFixed(2)}) janë më pak se pjesa cash (€${$e.toFixed(2)})`);return}const Zr="pending",Tr=At();let ft=Tr,Or=Tr,Ut=!1;if(!Tr){const R=N.lastCheckedAt?Date.now()-Date.parse(N.lastCheckedAt):Number.POSITIVE_INFINITY;N.isOnline&&Number.isFinite(R)&&R>=0&&R<Pd&&!Tr||await xl(2e3,2)?Ut=!0:(ft=!0,Or=!0)}if(pe!=="walk-in"){const R=q?.clients.find(De=>De.id===pe);let M=R;if(!ft)try{const{data:De,error:Ae}=await Dd(lr=>ee.from("clients").select("nui, nipt, email").eq("id",pe).eq("company_id",t.id).single().abortSignal(lr));if(Ae){if(!hs(Ae)){p(),f.error("Gabim: "+Ae.message);return}ft=!0,Or=!0}else M=De,me=R?.name||me,Ne=String(De?.email||Ne).trim()}catch(De){if(!hs(De)){p(),f.error("Gabim: "+(De instanceof Error?De.message:String(De)));return}ft=!0,Or=!0}me=R?.name||me,Ne=String(M?.email||Ne).trim();const we=M?.nui||M?.nipt,_e=ft?{valid:!0}:Gl(we);if(!_e.valid){f.error(`Gabim Compliance: Klienti ${R?.name} nuk ka NUI/NIPT të vlefshëm për faturim B2B. ${"message"in _e?_e.message:""}`),p();return}}let Fr;try{ft?await ya(b):await Sn(b),Fr=ja();const R=ka();if(R.warning){ne(wa(R)),Na(b,R),p();return}ne(null)}catch(R){p(),f.error("Kuponi nuk u krijua: koha fiskale e besuar nuk mund të verifikohet.",{description:R instanceof Error?R.message:"Lidheni pajisjen online dhe provoni përsëri.",duration:1e4});return}const yr=_a(Fr),ts=()=>(()=>{const R=new Date(Fr),M=_e=>String(_e).padStart(2,"0"),we=Math.random().toString(36).slice(2,6).toUpperCase();return`OFF-${R.getFullYear()}${M(R.getMonth()+1)}${M(R.getDate())}-${M(R.getHours())}${M(R.getMinutes())}${M(R.getSeconds())}${String(R.getMilliseconds()).padStart(3,"0")}-${we}`})();let Jn=ft?ts():zt||Hl(Number(yr.slice(0,4)));const Vi=yr,Hi=pe==="walk-in"?Qe.anonymousCustomerLabel:null,Wi=bd(A,_.taxTotal),lt=globalThis.crypto?.randomUUID?.()||`local-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,Gi={businessUnitId:String(k?.businessUnitId||k?.fiscal_business_unit_id||"")||void 0,businessUnitCode:String(k?.business_unit_code||"").trim()||void 0,operatorId:String(k?.fiscal_operator_id||"")||void 0,operatorName:String(k?.operator_name||k?.operatorName||"")||void 0,businessNui:Number(k?.sef_nui_numeric||k?.nui||k?.fiscal_number||0)||void 0,branchId:Number(k?.sef_branch_id||0)||void 0,posId:Number(k?.sef_default_pos_id||0)||void 0,sefId:String(k?.sef_fiscalization_no||"").trim()||void 0,applicationId:Number(k?.sef_application_id||0)||void 0,environment:mn(k?.fiscal_environment)},te=await da(b,{allowRemote:!ft,fallback:Gi});let Yr=!1;if(window.electronAPI?.isElectron===!0&&window.electronAPI.platform==="win32"&&Ct==="fiscal"){const R={companyId:b,businessUnitId:String(te.businessUnitId||""),businessNui:Number(te.businessNui||k?.sef_nui_numeric||k?.nui||0),branchId:Number(te.branchId||0),posId:Number(te.posId||0),sefId:String(te.sefId||k?.sef_fiscalization_no||"").trim(),environment:te.environment||"TEST",fiscalDay:yr};try{if(ft){if(Yr=await fi(R),!Yr)throw new Error("Ky POS Windows nuk është gati për shitje offline: autoriteti lokal ose certifikata e këtij POS-i nuk u verifikua në këtë pajisje. Lidheni online, përfundoni provizionimin/sinkronizimin dhe provoni sërish.")}else{const M={businessUnitId:R.businessUnitId,businessNui:R.businessNui,branchId:R.branchId,posId:R.posId,sefId:R.sefId,applicationId:Number(te.applicationId||k?.sef_application_id||0)||void 0,environment:R.environment};if(Sa(b,{businessUnitId:R.businessUnitId,branchId:R.branchId,posId:R.posId,sefId:R.sefId}),!await Cn(b,{businessNui:R.businessNui,allowRemote:!0,throwOnError:!0,
2context:M}))throw new Error("Provizionimi i nënshkruesit lokal nuk u përfundua për POS-in e zgjedhur.");if(Yr=await gi(R),!Yr)throw new Error("Autoriteti lokal fiskal i Windows nuk u aktivizua.");ft=!0,Jn=ts()}}catch(M){p(),f.error("Shitja fiskale në Windows u ndal për siguri.",{description:M instanceof Error?M.message:String(M),duration:12e3});return}}let oe=Ea({invoice:{id:lt,invoice_number:Jn,company_id:b},cart:A.map(R=>({...R,measurementUnit:R.measurementUnit,productCategory:R.productCategory})),company:t,paymentMethod:V,paymentMethods:W,manualDiscountPercent:he,manualDiscountAmount:tt,cashTendered:jr,changeDue:Rr,createdAt:Fr,fiscalContext:te});(te.businessUnitId||te.operatorId)&&(oe={...oe,businessUnitId:te.businessUnitId||oe.businessUnitId,operatorId:te.operatorId||oe.operatorId,operatorName:te.operatorName||oe.operatorName,branchId:te.branchId||oe.branchId,posId:te.posId||oe.posId,sefIdentifier:te.sefId||oe.sefIdentifier,businessId:Number(te.businessNui||k?.sef_nui_numeric||k?.nui||k?.fiscal_number||0
2)||oe.businessId,applicationId:te.applicationId||Td}),oe={...oe,atkEnvironment:te.environment||oe.atkEnvironment||"TEST"};let an,sn;const rs=[],ns=[];if(ft){const R=Number(te.branchId||0),M=Number(te.posId||0),we=String(te.sefId||k?.sef_fiscalization_no||"").trim();if(!Number.isSafeInteger(R)||R<=0||!Number.isSafeInteger(M)||M<=0||!we||!te.businessUnitId)throw new Error("Shitja offline u ndal: Branch ID, POS/SEF ID, SEF identifier dhe njësia lokale duhet të jenë të konfiguruara.");try{if(Yr){const _e=window.electronAPI?.localDb;if(!_e?.previewFiscalNumber)throw new Error("Windows SQLite nuk mbështet preview fiskal pa konsumim; përditësoni aplikacionin.");const De={companyId:b,branchId:R,posId:M,sefId:we,fiscalDay:yr,sequenceType:Pn,transactionId:lt,allocatorMode:"unbounded",unbounded:!0,minimumValue:1},Ae={companyId:b,branchId:R,posId:M,sefId:we,fiscalDay:"CONTINUOUS",sequenceType:Pa,transactionId:`${lt}:chronological`,allocatorMode:"unbounded",unbounded:!0,minimumValue:1},lr=await _e.previewFiscalNumber(De),kr=await _e.previewFiscalNumber(Ae);an=Number(lr.value),sn=Number(kr.value);const hr={branchId:R,posId:M,sefId:we,fiscalDay:yr},Bt=fl(b,te.businessUnitId,bs),on=await _e.getSnapshot?.(b,`counter:${Bt}`),K=Number(on?.nextValue||0)+1,Ee=Number(on?.rangeEnd||0);if(!Number.isSafeInteger(K)||K<=0||!Number.isSafeInteger(Ee)||Ee<K)throw new Error("Nuk ka interval të qëndrueshëm ATK CouponId në SQLite. Lidheni POS-in para se të mbarojë intervali lokal.");const ge={companyId:b,...hr,sequenceType:bs,transactionId:lt,rangeStart:K,rangeEnd:Ee},Ue=await _e.previewFiscalNumber(ge),Yt=Number(Ue.value);rs.push({...De,expectedValue:an},{...Ae,expectedValue:sn},{...ge,expectedValue:Yt}),ns.push({companyId:b,resource:`counter:${Bt}`,value:{nextValue:Yt,rangeEnd:Ee}}),oe={...oe,atkCouponId:Yt}}else an=await qn(b,te.businessUnitId,Pn,{branchId:R,posId:M,sefId:we,fiscalDay:yr,transactionId:lt}),sn=await qn(b,te.businessUnitId,Pa,{branchId:R,posId:M,sefId:we,fiscalDay:yr,transactionId:`${lt}:chronological`})}catch(_e){p(),f.error("Shitja offline u ndal: numëruesi ditor i këtij POS-i nuk është sinkronizuar lokalisht.",{description:_e instanceof Error?_e.message:String(_e),duration:1e4});return}oe={...oe,branchId:R,posId:M,sefIdentifier:we,dailyCouponCounter:an,documentNumber:sn,fiscalDate:yr,fiscalTransactionId:lt},await gl(b,5e3,te);try{const _e=String(te.businessUnitId||""),De=String(te.operatorId||"");if(!_e||!De)throw new Error("Kjo pajisje nuk ka kontekst fiskal lokal të ruajtur. Lidheni një herë online dhe përfundoni konfigurimin e POS-it para përdorimit offline.");console.log("[POS Offline] Duke gjeneruar CitizenCoupon QR të firmosur...");const Ae=await Ca("sign_offline_coupon",{offline:!0,coupon:{...oe,businessUnitId:_e,operatorId:De}}),lr=String(Ae?.qrData||Ae?.qrCodeUrl||"");if(!Dr({qrCodeUrl:lr}))throw new Error("Kuponi fiskal offline kërkon CitizenCoupon QR të firmosur. Lidheni këtë pajisje një herë me internetin, përfundoni onboarding-un cloud dhe lejoni ruajtjen lokale të çelësit ECDSA P-256 për offline.");const kr=String(Ae.verificationNo||"").trim().toUpperCase(),hr=String(oe.verificationNo||oe.nuikf||"").trim().toUpperCase(),Bt=String(Ae.couponId||"").trim();if(!kr||kr!==hr||kr===Bt)throw new Error("VerificationNo/NUIKF i nënshkruar nuk përputhet me snapshot-in lokal ose është i barabartë me CouponId.");oe={...oe,businessUnitId:_e,operatorId:De,nuikf:hr,qrCodeUrl:lr,signature:Ae.signature,atkCouponId:Number(Ae.couponId||0)||void 0,verificationNo:kr,atkPayloadBase64:String(Ae.atkPayloadBase64||Ae.details||"").trim()||void 0,atkSignatureBase64:String(Ae.atkSignatureBase64||Ae.posSignature||"").trim()||void 0,status:"signed",offlineMode:!0,offlineReason:"signed_locally_offline"},console.log("[POS Offline] ✓ CitizenCoupon QR i firmosur me sukses:",lr.substring(0,80)+"...")}catch(_e){console.error("[POS Offline] ❌ Firmosja e CitizenCoupon dështoi:",_e),p(),f.error("Shitja offline nuk mund të përfundohet pa POS signer lokal",{description:String(_e?.message||_e||"Lidheni këtë pajisje një herë online, përfundoni onboarding-un cloud dhe prisni konfirmimin e çelësit lokal para se të aktivizoni shitjet offline."),duration:1e4});return}}else{const R=Number(te.branchId||0),M=Number(te.posId||0),we=String(te.sefId||k?.sef_fiscalization_no||"").trim();if(!Number.isSafeInteger(R)||R<=0||!Number.isSafeInteger(M)||M<=0||!we||!te.businessUnitId){p(),f.error("Shitja online u ndal: Branch ID, POS/SEF ID dhe njësia fiskale janë të detyrueshme.");return}oe={...oe,branchId:R,posId:M,sefIdentifier:we}}if(ft&&!Dr(oe)){console.error("[POS Offline] Kuponi nuk ka CitizenCoupon QR të firmosur!",oe),p(),f.error("Gabim sistem: Kuponi nuk u firmua siç duhet",{description:"Kuponi offline duhet të ketë CitizenCoupon QR të firmosur para se të ruhet.",duration:1e4});return}const Qi=Pe==="paper"?"paper":"electronic_pdf",Xi=Pe==="email"?"email":"download",Zi=ye==="paid"&&!ht?{amount:_.total,method:V,notes:`POS Terminal Payment · ${ae.label}`}:null,as={company_id:b,client_id:pe==="walk-in"?null:pe,customer_display_name:Hi,invoice_number:Jn,invoice_date:Vi,notes:Gt.trim()||null,status:ye==="paid"?"paid":"pending",subtotal:_.subtotal,tax_total:_.taxTotal,grand_total:_.total,invoice_channel:pe==="walk-in"?"b2c_receipt":"b2b_invoice",fiscal_business_unit_id:te.businessUnitId||null,fiscal_operator_id:te.operatorId||null,invoice_delivery_mode:Qi,atk_supply_type:Wi,is_fiscalized:!1,fiscal_status:Zr,fiscalized_at:null,fiscal_fik:null,fiscal_nivf:null,fiscal_verification_token:null,fiscal_qr_url:oe.qrCodeUrl||null,delivery_channel:Xi,delivery_evidence:{source:"pos_terminal_v3",category:ae.value,createdAt:Fr,...ft?{fiscalDate:yr}:{},dailyCouponCounter:an??null,chronologicalFiscalNumber:sn??null,business_unit_id:te.businessUnitId||null,operator_id:te.operatorId||null,branch_id:te.branchId||null,pos_id:te.posId||null,posPayment:Zi,posCash:Xr,posPayments:ye==="paid"?W.map(R=>({method:R.method,amount:R.amount,notes:`POS Terminal Payment · ${ae.label}`})):[],...ft?{offlineReplay:!0}:{},...Pe!=="paper"?{electronicReceiptConsent:!0,consentTimestamp:new Date().toISOString(),deliveryRecipient:Pe==="email"?Ne:null}:{},...(he>.005||tt>.005)&&_.manualDiscountNetTotal>.005?{posDiscount:{scope:"total",amountBasis:"manual_total_net",mode:tt>.005?"fixed":"percent",percent:Number(he.toFixed(4)),amount:Number(_.manualDiscountNetTotal.toFixed(2))}}:{}}},Jr=Pe==="paper"&&zr()&&!Ar()&&!la()?xi():null;try{const R=A.map((K,Ee)=>({...u||window.electronAPI?.isElectron===!0?{id:vl(lt,Ee)}:{},...(()=>{const ge=_.lines[Ee],Ue=Number(K.discountPercent)||0;return{discount_percent:K.discountPercentExact||He(String(Ue),4),discount_amount:K.productDiscountAmountExact||ge.productDiscountNet,product_net_total:ge.netAfterProductDiscount,product_gross_total:ge.grossAfterProductDiscount,net_total:ge.netTotal,total:ge.total}})(),invoice_id:lt,product_id:K.sourceProductId||null,inventory_product_id:K.inventoryProductId||null,product_sku:K.sku||null,fiscal_category_code:K.productCategory||"TT",fiscal_measurement_unit_code:K.measurementUnit||"EA",product_name:K.name,quantity:K.quantityExact||String(K.quantity),price:K.fiscalPrice||String(K.price),tax_rate:K.taxRate,vat_norm:K.vatNorm})),M=ft?await(async()=>{const K={...as,id:lt,pos_idempotency_key:S,is_fiscalized:!1,fiscal_status:Zr,fiscalized_at:null,fiscal_fik:null,fiscal_nivf:null,fiscal_verification_token:null,fiscal_qr_url:oe.qrCodeUrl||null},Ee={...oe,companyId:b,invoiceId:lt,atkStatus:"pending_sync",createdAt:oe.createdAt,local_id:lt};return await ri([{entity:"invoice",operation:"create",companyId:b,payload:{companyId:b,invoice:K,items:R,replayPosPayment:!0,posIdempotencyKey:S},entityId:lt,idempotencyKey:S},{entity:"fiscal_coupon",operation:"create",companyId:b,localId:lt,entityId:lt,payload:Ee,idempotencyKey:`${S}:fiscal-coupon`,branchId:oe.branchId||null}],{fiscalAllocations:rs,counterSnapshots:ns,replicaRecords:[{companyId:b,entityType:"fiscal_coupons",entityId:lt,branchId:oe.branchId||null,payload:Ee,syncStatus:"pending",deviceId:oe.deviceId||null,originDeviceId:oe.deviceId||null}],auditEvents:[{eventId:`offline-sale:${lt}`,entity:"invoice",entityId:lt,operation:"create",eventType:"offline_sale_committed",idempotencyKey:S,payload:{invoiceId:lt,couponId:lt,branchId:oe.branchId||null,posId:oe.posId||null,fiscalNumber:oe.atkCouponId||null}}]}),{...K,clients:null,offline_pending:!0}})():await j.mutateAsync({invoice:{...as,id:lt},items:R,posIdempotencyKey:S,preferOffline:!1,forceOnline:Ut,suppressToast:!0}),we=!!M?.offline_pending;if(we&&b&&M?.id)try{const K=["pos-workspace-v3",b,ae.value,Fe,w],Ee=s.getQueryData(K)||q;if(Ee){const ge=Mc({workspace:Ee,invoice:M,items:R,payments:W});s.setQueryData(K,ge),await qr(b,"pos-workspace",ge,{mirrorReplica:!1}),await qr(b,"invoices",ge.invoices||[]),await qr(b,"payments:all",ge.payments||[]),await qr(b,`payments:${M.id}`,(ge.payments||[]).filter(Ue=>Ue.invoice_id===M.id)),s.setQueriesData({queryKey:["invoices",b]},Ue=>Array.isArray(Ue)?[ge.invoices?.[0],...Ue.filter(Yt=>Yt?.id!==M.id)]:Ue),s.invalidateQueries({queryKey:["payments"]})}}catch(K){console.warn("[POS] offline read-model projection deferred:",K)}we&&M?.id&&Pe!=="paper"&&xt({invoiceId:M.id,coupon:{...oe,id:M.id,invoiceId:M.id},choice:Pe,recipientEmail:Ne,recipientName:me});let _e=W;if(M?.id&&ye==="paid"&&!we){const K=jl({payments:W,targetTotal:M?.grand_total});if(K.error)throw new Error(K.error);_e=K.payments}let De=Es({documentType:Ct,offlinePending:we}),Ae,lr,kr,hr=!1;if(M?.id&&ye==="paid"&&!we)for(const[K,Ee]of _e.entries()){const ge=_e.length>1?` (${K+1}/${_e.length})`:"";try{if((await v.mutateAsync({invoiceId:M.id,amount:Ee.amount,method:Ee.method,notes:`POS Terminal Payment · ${ae.label}${ge}`,idempotencyKey:`${S}:payment:${K}`,suppressToast:!0}))?.approval_pending){hr=!0;break}}catch(Ue){if(b&&Nr(Ue))await Zs({entity:"payment",operation:"record_payment",companyId:b,payload:{companyId:b,invoiceId:M.id,amount:Ee.amount,method:Ee.method,notes:`POS Terminal Payment · ${ae.label}${ge}`,idempotencyKey:`${S}:payment:${K}`}}),f.info("Pagesa u ruajt offline — do të sinkronizohet automatikisht.");else throw Ue}}if(M?.id&&!we&&!hr&&Ct==="fiscal"){const K=await Ln(M.id,t,{requireAtkProof:!1,waitForCouponMs:4e3});if(!K)throw new Error("Kuponi fiskal nuk u krijua për transmetim në ATK.");try{const ge=Number(te.branchId||0),Ue=Number(te.posId||0),Yt=String(te.sefId||k?.sef_fiscalization_no||"").trim();te.businessUnitId&&ge>0&&Ue>0&&Yt&&await yl(b,te.businessUnitId,Pn,{branchId:ge,posId:Ue,sefId:Yt,fiscalDay:yr})}catch(ge){console.warn("[POS] daily POS counter checkpoint deferred:",ge)}kr=K.id||M.id,f.info("Kuponi u ruajt;
2 po dërgohet në ATK…",{id:`atk-transmit-${K.id||M.id}`,description:"Po pritet përgjigjja e ruajtur nga ATK. Mos e përsëritni pagesën."}),Hr(!0);let Ee;try{Ee=await ni(K)}finally{Hr(!1)}Ae=Ee,De=Es({documentType:Ct,offlinePending:we,transmission:Ee}),lr=Ee.message||Ee.error}else M?.id&&!we&&!hr&&kl(M.id,b).catch(()=>{});g([]),D(),tr(""),sr("paid"),yt("cash"),Le(!1),H([{method:"cash",amount:""}]),Te(""),ar(""),Rt("paper"),jt(""),Ot(!1),M?.id&&!we&&(s.invalidateQueries({queryKey:["pos-workspace-v3"]}),s.invalidateQueries({queryKey:["fiscal-coupons"]}));const Bt=M?.id?{label:"Shiko",onClick:()=>O(`/dashboard/invoices/${M.id}`)}:void 0,on=hr?"Fatura u krijua; pagesa pret aprovim dhe nuk duhet të arkëtohet përsëri.":ye==="paid"?"Pagesa është regjistruar — mos e kryeni pagesën përsëri.":"Shitja është ruajtur — mos e krijoni përsëri.";if(hr)f.warning("Pagesa e POS-it u dërgua për aprovim; kuponi fiskal nuk u transmetua ende.",{description:"Një përdorues i autorizuar duhet ta postojë nga Qendra e Aprovimeve.",duration:12e3,action:Bt});else if(De==="rejected")f.error("Shitja u regjistrua, por kuponi fiskal u refuzua nga ATK.",{description:`${lr||"Kontrolloni kredencialet fiskale të POS-it."} ${on}`,duration:12e3,action:Bt});else if(De==="reconciliation_required")f.warning("Shitja u regjistrua; transmetimi i kuponit fiskal nuk u konfirmua.",{description:`${lr||"Kuponi mbetet në pajtim të sigurt dhe nuk do të ridërgohet automatikisht."} ${on}`,duration:12e3,action:Bt});else if(De==="queued"){f.info("Shitja u regjistrua; kuponi fiskal po dërgohet në ATK.",{description:lr||"Statusi i dërgimit përditësohet automatikisht. Mos e kryeni pagesën përsëri.",action:Bt});const K=kr||M?.id;if(K&&!Xt.current.has(K)){const Ee=new AbortController;Xt.current.set(K,Ee),ai({couponId:K,intervalMs:300,timeoutMs:6e4,signal:Ee.signal}).then(async ge=>{if(Xt.current.delete(K),ge.success&&!ge.queued){if(f.success("Kuponi u fiskalizua dhe u pranua nga ATK.",{action:Bt}),s.invalidateQueries({queryKey:["pos-workspace-v3"]}),s.invalidateQueries({queryKey:["fiscal-coupons"]}),M?.id&&Pe!=="paper"&&ot({invoiceId:M.id,choice:Pe,recipientEmail:Ne,recipientName:me}),M?.id&&Pe==="paper"&&zr()){const Ue=M.id;if(!dt.current.has(Ue)){dt.current.add(Ue);try{await Ie(Ue,Jr)||(dt.current.delete(Ue),f.warning("Kuponi u fiskalizua, por printimi automatik nuk u krye."))}catch(Yt){console.error("[POS polling print error]",Yt),dt.current.delete(Ue),f.error("Kuponi u fiskalizua, por printeri raportoi gabim.")}}}}else ge.requiresManualVerification&&f.warning("Rezultati i kuponit nuk u konfirmua; kërkohet verifikim manual.",{description:ge.message||"Mos e kryeni pagesën përsëri derisa kuponi të kontrollohet.",id:`atk-reconciliation-${K}`,action:Bt})}).catch(()=>{Xt.current.delete(K)})}}else if(De==="offline"){const K=Ll(r,Yr&&!Or&&!At()?"online_local_first":"offline_pending");f.info(K.title,{description:K.description,action:Bt})}else{const K=!!Ae?.cached;f.success(De==="accepted"?K?"Kuponi është fiskalizuar tashmë":"Shitja u krye dhe u fiskalizua me sukses":"Shitja u krye me sukses",{action:Bt}),De==="accepted"&&M?.id&&Pe!=="paper"&&ot({invoiceId:M.id,choice:Pe,recipientEmail:Ne,recipientName:me})}if(M?.id&&!hr&&Pe==="paper"&&zr()){const K=M.id,Ee={...oe,id:K,invoiceId:K};(async()=>{if(!dt.current.has(K))try{if(Ct==="fiscal"&&!td({outcome:De,transmission:Ae}))return;if(dt.current.add(K),we&&De!=="accepted"){const Ue=_n(t?.fiscal_settings||{}),Yt=await In(Ee,{companyName:t?.name||"Kompania",companyNui:t?.nui||void 0,companyFiscalNumber:t?.fiscal_number||void 0,companyTvshNumber:t?.tvsh_number||void 0,companyLogoUrl:t?.logo_url||void 0,format:Ue,isCopy:!1,language:r});await Da(Yt,{filename:Tn(K,r),preparedWindow:Jr,printerWidth:Ue==="thermal_58mm"?58:80,silent:Ar(),fallbackOnSilentFailure:!0,noDialogFallback:la()})||(dt.current.delete(K),f.warning("Shitja offline u ruajt, por printimi silent dështoi.",{description:"Kontrolloni printerin default dhe përdorni veprimin “Printo” te kuponi i ruajtur.",action:Bt,duration:1e4}));return}const{data:ge}=await ee.from("invoices").select("*, invoice_items(*), clients(*)").eq("id",K).maybeSingle();ge&&await Ie(K,Jr)||dt.current.delete(K)}catch(ge){console.warn("Auto-print skipped:",ge),dt.current.delete(K)}})()}}catch(R){if(console.error(R),Jr&&!Jr.closed)try{Jr.close()}catch{}f.error(`Pagesa nuk u përfundua: ${fd(R)}`)}finally{p()}},[Z,m,Fe,q,w,A,b,r,Ct,k,N.isOnline,N.lastCheckedAt,pe,zt,Qe,t,_,ae,j,ye,v,tt,V,he,Gt,Pe,vt,_t,ht,se,bt,O,Ie,xt,ot,u,s]);d.useEffect(()=>{const c=p=>{if(p.key==="F2"&&(p.preventDefault(),document.querySelector('input[placeholder*="Kërko"]')?.focus()),p.key==="F4"){p.preventDefault(),document.querySelector('[data-pos-region="checkout"]')?.scrollIntoView({behavior:"smooth",block:"start"});return}if(ae.value==="retail_market"&&(p.key==="F7"||p.key==="F8"||p.key==="F9")){p.preventDefault();const D=p.key==="F7"?"manual-price":p.key==="F8"?"quantity":"scale";
2document.querySelector(`[data-pos-action="${D}"]`)?.click();return}if(p.key==="F9"){if(p.preventDefault(),ae.value==="retail_market")return;be()}p.key==="Escape"&&A.length>0&&p.target.tagName!=="INPUT"&&window.confirm("A dëshironi të pastroni shportën?")&&(ut.current=null,mr(!1),Dt.current=!1,g([]))};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[A,ae.value,be]);const mt=d.useCallback(c=>{g(p=>{const D=p.find(T=>T.id===c.id),S=(D?.quantity||0)+1;return c.stockTracked===!0&&c.stockQuantity!=null&&S>c.stockQuantity?(f.error(`Produkti "${c.name}" nuk ka stok të mjaftueshëm. Gjendja: ${c.stockQuantity}.`),p):D?p.map(T=>T.id===c.id?{...T,quantity:S,quantityExact:He(String(S),4)}:T):[...p,{...c,quantity:1,quantityExact:"1.0000"}]})},[]),X=d.useCallback(async c=>{const p=Dn(c);if(!p)return;const D=xe.find(Je=>Dn(Je.barcode)===p);if(D){mt(D),F(""),requestAnimationFrame(()=>Et.current?.focus()),f.success(`U shtua: ${D.name}`);return}if(!b)return;if(At()){f.error(`Artikulli me barkod ${p} nuk gjendet në katalogun offline.`);return}const S=await ee.from("products").select("id, name, description, sku, price, barcode, tax_rate, vat_norm, tvsh_norm, discount_percent, campaign_discount_percent, campaign_start_date, campaign_end_date, pos_category_id, atk_category_code, measurement_unit_code, item_type, track_stock, is_active, fiscal_metadata_review_required, updated_at").eq("company_id",b).eq("barcode",p).maybeSingle();let T=S.data,W=S.error;if(W&&(cr(W,"campaign_discount_percent")||cr(W,"campaign_start_date")||cr(W,"campaign_end_date")||cr(W,"pos_category_id")||cr(W,"atk_category_code")||cr(W,"measurement_unit_code")||cr(W,"sku")||cr(W,"tvsh_norm")||cr(W,"item_type")||cr(W,"track_stock")||cr(W,"is_active")||cr(W,"fiscal_metadata_review_required"))){const Je=await ee.from("products").select("id, name, description, price, barcode, tax_rate, vat_norm, discount_percent, updated_at").eq("company_id",b).eq("barcode",p).maybeSingle();T=Je.data?{...Je.data,campaign_discount_percent:null,campaign_start_date:null,campaign_end_date:null,pos_category_id:null,atk_category_code:"TT",measurement_unit_code:"EA",sku:null,purchase_price:0,tvsh_norm:Je.data.vat_norm,item_type:"product",track_stock:!0,is_active:!0,fiscal_metadata_review_required:!0}:null,W=Je.error}if(W||!T){f.error(`Artikulli me barkod ${p} nuk u gjet`);return}const U=T,me=(q?.inventoryProducts||[]).find(Je=>Je.catalog_product_id===U.id),Ne=me?(q?.inventoryStock||[]).find(Je=>Je.product_id===me.id)?.current_quantity??0:q?.inventoryEnabled?0:void 0,$e=q?.inventoryEnabled===!0&&(me?.track_stock??!0);mt({id:U.id,name:U.name,sku:U.sku||null,description:U.description||"Artikull operativ",price:Number(U.price||0),fiscalPrice:String(U.price??"0"),taxRate:ce?Number(U.tax_rate??18):0,vatNorm:ce?Ns(U.vat_norm,U.tax_rate,"A"):"A",discountPercent:Nn(U),discountPercentExact:He(String(Nn(U)),4),measurementUnit:String(U.measurement_unit_code||"EA"),productCategory:String(U.atk_category_code||"TT"),barcode:U.barcode,tab:q?.posCategories?.find(Je=>Je.id===U.pos_category_id)?.name||"Të gjitha",badge:"Gati për Barcode",stockLabel:q?.inventoryEnabled?`Stok: ${Ne}`:ce?`TVSH ${Number(U.tax_rate??18)}%`:"Jashtë TVSH-së",accent:"blue",sourceProductId:U.id,inventoryProductId:me?.id||null,stockQuantity:Ne==null?void 0:Number(Ne),stockTracked:$e}),F(""),requestAnimationFrame(()=>Et.current?.focus()),f.success(`U shtua: ${U.name}`)},[mt,xe,b,q?.inventoryEnabled,q?.inventoryProducts,q?.inventoryStock,q?.posCategories,ce]);d.useEffect(()=>{if(!i||z)return;const c=()=>Et.current?.focus(),p=window.setTimeout(c,100);return window.addEventListener("focus",c),()=>{window.clearTimeout(p),window.removeEventListener("focus",c)}},[i,z]),d.useEffect(()=>{if(!i||z)return;const c=p=>{if(p.ctrlKey||p.metaKey||p.altKey)return;const D=Date.now(),S=pt.current;if(Zc(p.key)){const T=Dn(S.value),W=Yc({value:T,startedAt:S.startedAt,lastKeyAt:S.lastKeyAt,now:D});pt.current={value:"",startedAt:0,lastKeyAt:0},W&&(p.preventDefault(),X(T));return}p.key.length===1&&(!S.value||D-S.lastKeyAt>250?pt.current={value:p.key,startedAt:D,lastKeyAt:D}:(S.value+=p.key,S.lastKeyAt=D))};return window.addEventListener("keydown",c,!0),()=>window.removeEventListener("keydown",c,!0)},[X,i,z]);const{data:ve}=Kr({queryKey:["fiscal-readiness",b],queryFn:()=>b?hi(b):null,enabled:!!b&&!At(),refetchInterval:c=>{if(At())return!1;const p=c.state.data;return p&&(Number(p.sefInFlightCount||0)>0||Number(p.sefActionRequiredCount||0)>0||Number(p.offlinePendingCount||0)>0)?6e4:!1},staleTime:3e4,retry:0}),fe=ve?pi(ve):null,Cr=!!ve?.sefInFlightCount,pr=!!ve?.sefActionRequiredCount,Gr=Ri({networkOnline:N.isOnline,isSaving:Qt,isTransmitting:Pr,readinessState:fe}),Qr=Number(ve?.offlinePendingCount||0)+Number(ve?.sefPendingCount||0);if(ze.designId==="restaurant-workspace")return e.jsx(Sd,{catalog:
2xe,cart:A,addToCart:mt,setCart:g,totals:_,manualDiscountPercent:he,setManualDiscountPercent:Kt,manualDiscountAmount:tt,setManualDiscountAmount:St,deliveryChoice:Pe,setDeliveryChoice:Rt,deliveryEmail:vt,setDeliveryEmail:jt,electronicReceiptConsent:_t,setElectronicReceiptConsent:Ot,search:Xe,setSearch:tr,isLoading:Ze,isCheckoutInFlight:Qt,onCheckout:be,paymentMethod:V,setPaymentMethod:yt,checkoutMode:ye,setCheckoutMode:sr,isSplitPayment:ht,setIsSplitPayment:Le,splitPayments:se,setSplitPayments:H,cashReceived:bt,setCashReceived:Te,clients:q?.clients||[],categoryTabs:Ye,selectedClientId:pe,setSelectedClientId:Ce,onManageMenu:()=>O("/dashboard/products"),companyId:b||"unknown-company",businessName:t?.name||"Restorant / Kafiteri",logoUrl:t?.logo_url||void 0,fiscalStatus:Gr,pendingCount:Qr,posFiscalUnitSelector:fr});if(ze.designId==="taxi-workspace")return e.jsx(dd,{company:t,companyId:b||"unknown-company",canOperatePos:m});if(ae.value==="retail_market"){const c=()=>{ut.current=null,mr(!1),Dt.current=!1,g([])};return e.jsxs(xs,{children:[e.jsx(_d,{businessName:t?.name||"FaturaPro",logoUrl:t?.logo_url,companyId:b||null,nextInvoiceNumber:zt,posFiscalUnitSelector:fr,posStatus:Gr,pendingCount:Qr,isRestrictedRole:et,search:Xe,setSearch:tr,activeTab:It,setActiveTab:nr,productTabs:Ye,filteredCatalog:x,isLoading:Ze,cart:A,setCart:g,addToCart:mt,totals:_,heldCart:G,holdOrRestoreCart:or,clearCart:c,isCheckoutInFlight:Qt,onCheckout:be,paymentMethod:V,setPaymentMethod:yt,checkoutMode:ye,setCheckoutMode:sr,isSplitPayment:ht,setIsSplitPayment:Le,splitPayments:se,setSplitPayments:H,cashReceived:bt,setCashReceived:Te,clients:q?.clients||[],selectedClientId:pe,setSelectedClientId:Ce,manualDiscountPercent:he,setManualDiscountPercent:Kt,manualDiscountAmount:tt,setManualDiscountAmount:St,deliveryChoice:Pe,setDeliveryChoice:Rt,deliveryEmail:vt,setDeliveryEmail:jt,electronicReceiptConsent:_t,setElectronicReceiptConsent:Ot,invoiceNotes:Gt,setInvoiceNotes:ar,onOpenClient:()=>h(!0),onOpenScanner:()=>L(!0),onSetReturnDialogMode:p=>ke(p)}),e.jsx(vs,{companyId:b,open:kt,onOpenChange:h,onCreated:p=>Ce(p.id)}),e.jsx(ys,{open:z,onOpenChange:L,onDetected:X}),e.jsx(zn,{open:st!==null,onOpenChange:p=>{p||ke(null)},companyId:b,mode:st||"return"})]})}const Yn=()=>{ut.current=null,mr(!1),Dt.current=!1,g([])};return e.jsx(xs,{children:e.jsxs("div",{"data-pos-design":ze.designId,"data-fiscal-engine":fn,className:"pos-desktop-shell flex min-h-dvh min-w-0 flex-col overflow-x-hidden bg-background selection:bg-primary/20 xl:h-dvh xl:max-h-dvh xl:overflow-hidden",children:[e.jsx("header",{className:"sticky top-0 z-50 w-full border-b border-border/60 bg-background/80 backdrop-blur-xl",children:e.jsxs("div",{className:"flex h-16 min-w-0 items-center justify-between gap-2 px-3 sm:gap-4 sm:px-6",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2 sm:gap-4",children:[e.jsx(Ja,{businessName:t?.name,logoUrl:t?.logo_url,compact:!0}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h1",{className:"truncate text-base font-bold tracking-tight sm:text-lg",children:Re.title}),e.jsxs("p",{className:"hidden truncate text-xs text-muted-foreground sm:block",children:[t?.name," · ",Re.terminalLabel]})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1 sm:gap-3",children:[e.jsx(Zn,{status:Gr,pendingCount:Qr,compact:!0}),ve&&e.jsxs(jn,{children:[e.jsx(yn,{asChild:!0,children:e.jsxs("div",{className:I("hidden items-center gap-2 rounded-2xl border px-3 py-1.5 xl:flex transition-colors",fe==="ready"?"border-emerald-500/30 bg-emerald-500/10":fe==="syncing"?"border-blue-500/30 bg-blue-500/10":"border-amber-500/30 bg-amber-500/10"),children:[e.jsx(ma,{className:I("h-3.5 w-3.5",fe==="ready"?"text-emerald-500":fe==="syncing"?"text-blue-500":"text-amber-500")}),e.jsx("span",{className:I("text-[10px] font-bold uppercase tracking-tight",fe==="ready"?"text-emerald-600":fe==="syncing"?"text-blue-600":"text-amber-600"),children:fe==="ready"?"ATK Ready":fe==="syncing"?"Duke u sinkronizuar":"Review Needed"})]})}),e.jsx(kn,{children:fe==="ready"?"Sistemi është plotësisht i sinkronizuar me ATK":fe==="syncing"?`SEF po dërgon ${ve.sefInFlightCount} dokumente në ATK`:`Mungojnë: ${ve.missing.join(", ")}`})]}),ve&&e.jsxs(jn,{children:[e.jsx(yn,{asChild:!0,children:e.jsxs("div",{className:I("hidden items-center gap-2 rounded-2xl border px-3 py-1.5 xl:flex transition-all hover:shadow-md hover:shadow-indigo-500/10",pr?"border-rose-500/30 bg-rose-500/10":Cr?"border-blue-500/30 bg-blue-500/10":"border-indigo-500/30 bg-indigo-500/10"),children:[e.jsx(An,{className:I("h-3.5 w-3.5",pr?"text-rose-500 animate-pulse":Cr?"text-blue-500 animate-pulse":"text-indigo-500")}),e.jsx("span",{className:I("text-[10px] font-bold uppercase tracking-tight",pr?"text-rose-600":Cr?"text-blue-600":"text-indigo-600"),children:pr?"Sync Needs Attention":Cr?"Duke u sinkronizuar":"e-Kosova Live"})]})}),e.jsx(kn,{children:pr?`${ve.sefActionRequiredCount} transmetime SEF kërkojnë vëmendje`:Cr?`SEF po dërgon ${ve.sefInFlightCount} dokumente në ATK`:"Lidhja me e-Kosova është aktive dhe e sinkronizuar"})]}),fr,e.jsxs("div",{className:"hidden items-center gap-2 rounded-2xl border border-border/60 bg-muted/30 px-3 py-1.5 xl:flex",children:[e.jsx(On,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-xs font-medium",children:new Date().toLocaleTimeString("sq-AL",{hour:"2-digit",minute:"2-digit"})})]}),!et&&e.jsxs(rt,{variant:"outline",size:"sm",className:"rounded-2xl border-border/60 px-2 sm:px-3","aria-label":"Kategoritë",onClick:()=>Be(!Me),children:[e.jsx(lo,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:"Kategoritë"})]}),!et&&e.jsxs(e.Fragment,{children:[e.jsxs(rt,{variant:"outline",size:"sm",className:"rounded-2xl border-amber-500/40 px-2 text-amber-700 hover:bg-amber-500/10 sm:px-3","aria-label":"Kthim",onClick:()=>ke("return"),disabled:!b,children:[e.jsx(Us,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:"Kthim"})]}),e.jsxs(rt,{variant:"outline",size:"sm",className:"rounded-2xl border-red-500/40 px-2 text-red-700 hover:bg-red-500/10 sm:px-3","aria-label":"Anulim",onClick:()=>ke("void"),disabled:!b,children:[e.jsx(Bs,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:"Anulim"})]})]}),e.jsx(rt,{variant:"ghost",size:"icon",className:"rounded-2xl",asChild:!0,children:e.jsx(ua,{to:"/dashboard",children:e.jsx(Ka,{className:"h-4 w-4"})})})]})]})}),Wr&&e.jsxs(Rl,{variant:"destructive",className:"sticky top-16 z-40 mx-3 mt-3 border-rose-400/60 bg-rose-50/95 shadow-lg backdrop-blur sm:mx-6 dark:bg-rose-950/95",role:"alert","aria-live":"assertive",children:[e.jsx(On,{className:"h-4 w-4"}),e.jsx(Ol,{children:n("fiscal.clockMismatchTitle")}),e.jsx(Fl,{children:n("fiscal.clockMismatch")})]}),e.jsx("main",{className:"flex min-h-0 min-w-0 flex-1 pb-16 max-lg:pb-20 xl
2:overflow-hidden xl:pb-0",children:e.jsxs("div",{className:"grid min-h-0 min-w-0 w-full grid-cols-1 max-xl:grid-rows-none max-xl:overflow-visible xl:grid-cols-[64px_minmax(0,1fr)_minmax(300px,38%)] 2xl:grid-cols-[280px_minmax(0,1fr)_420px]",children:[e.jsxs("aside",{className:"hidden min-h-0 border-r border-border/60 bg-muted/10 p-4 xl:flex xl:flex-col",children:[e.jsx("div",{className:"flex flex-1 flex-col gap-2",children:Re.menu.map((c,p)=>e.jsxs(jn,{children:[e.jsx(yn,{asChild:!0,children:e.jsxs("button",{onClick:()=>C(c),className:I("flex w-full items-center gap-3 rounded-2xl p-3 text-sm font-medium transition-all hover:bg-muted",p===0?"bg-primary text-primary-foreground shadow-lg shadow-primary/20":"text-muted-foreground"),children:[e.jsx("div",{className:"flex h-6 w-6 items-center justify-center",children:p===0?e.jsx($r,{className:"h-5 w-5"}):p===1?e.jsx(pa,{className:"h-5 w-5"}):p===2?e.jsx($s,{className:"h-5 w-5"}):p===3?e.jsx(En,{className:"h-5 w-5"}):p===4?e.jsx(An,{className:"h-5 w-5"}):p===5?e.jsx(ha,{className:"h-5 w-5"}):e.jsx(Vs,{className:"h-5 w-5"})}),e.jsx("span",{className:"hidden 2xl:block",children:c})]})}),e.jsx(kn,{side:"right",className:"2xl:hidden",children:c})]},c))}),e.jsxs("div",{className:"mt-auto space-y-4",children:[e.jsxs("div",{className:"rounded-3xl border border-border/60 bg-card p-4 shadow-sm hidden 2xl:block",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Gjendja Live"}),e.jsx("div",{className:I("h-2 w-2 rounded-full animate-pulse",wt.pendingCount>4?"bg-amber-500":"bg-emerald-500")})]}),e.jsx("div",{className:"mt-2 text-xl font-bold tracking-tight",children:Ve(wt.todayRevenue)}),e.jsxs("p",{className:"text-[10px] text-muted-foreground",children:[wt.todayInvoices," transaksione sot"]}),e.jsxs(rt,{variant:"hero",size:"sm",className:"w-full mt-4 h-9 rounded-xl text-[10px] uppercase font-bold",disabled:it||!b,onClick:async()=>{if(b){ue(!0);try{const c=await Ql(b);c.success?f.success(`Turni u mbyll dhe u kontabilizua: ${c.summary}`):f.warning(`Turni u mbyll me paralajmërime: ${c.errors.join(", ")}`)}catch(c){console.error("Shift closing failed:",c),f.error("Gabim gjatë mbylljes së turnit")}finally{ue(!1)}}},children:[it?e.jsx(qt,{className:"h-3 w-3 animate-spin mr-2"}):e.jsx(co,{className:"h-3 w-3 mr-2"}),"Mbyll Turnin"]})]}),e.jsx("button",{onClick:()=>f.info("Shkurtoret: F2 kërkim, F4 pagesë, Esc mbyll dialogun."),className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground transition-colors hover:text-foreground xl:mx-auto 2xl:mx-0","aria-label":"Ndihmë për POS",children:e.jsx(cs,{className:"h-5 w-5"})})]})]}),e.jsxs("section",{"data-pos-region":"catalog",className:"flex min-h-0 min-w-0 flex-col overflow-hidden bg-background max-xl:min-h-0 max-xl:overflow-visible",children:[e.jsx("div",{className:"grid gap-3 border-b border-border/40 bg-muted/10 p-4 md:grid-cols-3",children:ae.posOperationalLanes.slice(0,3).map(c=>e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card px-4 py-3 shadow-sm",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:I("h-2 w-2 rounded-full",c.tone==="warning"?"bg-amber-500":c.tone==="positive"?"bg-emerald-500":"bg-primary")}),e.jsx("span",{className:"text-xs font-bold tracking-tight",children:c.label})]}),e.jsx("p",{className:"mt-1 line-clamp-2 text-[11px] leading-4 text-muted-foreground",children:c.description})]},c.label))}),e.jsxs("div",{className:"flex flex-col gap-4 border-b border-border/40 p-4 sm:p-6 lg:flex-row lg:items-center lg:justify-between",children:[e.jsxs("div",{className:"relative flex-1 max-w-xl",children:[e.jsx(Ur,{className:"absolute left-4 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(nt,{value:Xe,onChange:c=>tr(c.target.value),placeholder:"Kërko artikullin manualisht...",className:"h-12 rounded-3xl border-border/60 bg-muted/30 pl-11 focus-visible:ring-primary/20"}),e.jsxs("div",{className:"absolute right-4 top-1/2 flex -translate-y-1/2 items-center gap-1",children:[e.jsx("kbd",{className:"hidden h-6 items-center rounded border border-border/60 bg-muted px-1.5 text-[10px] font-medium text-muted-foreground lg:inline-flex",children:"⌘"}),e.jsx("kbd",{className:"hidden h-6 items-center rounded border border-border/60 bg-muted px-1.5 text-[10px] font-medium text-muted-foreground lg:inline-flex",children:"K"})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 max-lg:w-full lg:flex-nowrap lg:gap-3",children:[i&&e.jsxs("div",{className:I("relative flex w-full items-center sm:w-[240px]",Re.accentText),children:[e.jsx(ha,{className:"pointer-events-none absolute left-3 h-4 w-4"}),e.jsx(nt,{ref:Et,value:gr,onChange:c=>F(c.target.value),onKeyDown:c=>{c.key!=="Enter"||c.defaultPrevented||(c.preventDefault(),X(c.currentTarget.value))},placeholder:"Skano barkodin — USB gati","aria-label":"Skano barkodin; artikulli shtohet automatikisht",className:I("h-12 rounded-3xl border bg-background/40 pl-10 text-sm font-medium",Re.accentBorder)})]}),e.jsx(Pc,{companyId:b,onCreated:()=>s.invalidateQueries({queryKey:["pos-workspace-v3"]})}),e.jsxs(rt,{variant:"outline",className:"rounded-3xl border-border/60 h-12 px-6",onClick:()=>L(!0),children:[e.jsx(ba,{className:"mr-2 h-4 w-4"}),"Skano"]}),e.jsxs(rt,{variant:"outline",className:"rounded-3xl border-border/60 h-12 px-6",onClick:()=>Be(c=>!c),children:[e.jsx(uo,{className:"mr-2 h-4 w-4"}),"Filtra"]})]})]}),e.jsx("div",{className:"flex items-center gap-2 overflow-x-auto border-b border-border/20 px-4 py-3 no-scrollbar sm:px-6",children:Ye.map(c=>e.jsx("button",{onClick:()=>nr(c),className:I("whitespace-nowrap rounded-2xl px-4 py-2 text-sm font-medium transition-all",It===c?"bg-primary/10 text-primary":"text-muted-foreground hover:bg-muted"),children:c},c))}),e.jsx(Aa,{className:"flex-1 max-xl:min-h-[28rem] max-xl:flex-none max-xl:overflow-visible",children:Zt?e.jsxs("div",{className:"flex min-h-[18rem] flex-col items-center justify-center gap-3 p-6 text-center",children:[e.jsx("div",{className:"flex h-16 w-16 items-center justify-center rounded-full bg-amber-500/10",children:e.jsx(cs,{className:"h-8 w-8 text-amber-600"})}),e.jsx("h4",{className:"text-lg font-bold",children:"Katalogu nuk u ngarkua"}),e.jsx("p",{className:"max-w-md text-sm text-muted-foreground",children:Sr}),e.jsxs(rt,{type:"button",variant:"outline",onClick:()=>void Lt(),disabled:Pt,children:[Pt?e.jsx(qt,{className:"mr-2 h-4 w-4 animate-spin"}):null,"Provo përsëri"]})]}):Ze?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(qt,{className:"h-8 w-8 animate-spin text-primary"})}):e.jsxs("div",{className:"grid gap-4 p-4 sm:grid-cols-2 sm:gap-6 sm:p-6 lg:grid-cols-3 2xl:grid-cols-4",children:[x.map(c=>e.jsxs("button",{onClick:()=>mt(c),className:"group relative flex flex-col items-start overflow-hidden rounded-2xl border border-border/60 bg-card p-4 transition-all hover:-translate-y-1 hover:border-primary/40 hover:shadow-2xl hover:shadow-
2primary/5 sm:rounded-[32px] sm:p-5",children:[e.jsx("div",{className:I("flex h-32 w-full items-center justify-center rounded-[24px] border transition-transform group-hover:scale-[1.02]",md[c.accent]),children:e.jsx(pa,{className:"h-10 w-10 opacity-80"})}),e.jsxs("div",{className:"mt-4 flex w-full flex-col items-start",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:c.tab}),e.jsx(tn,{variant:"outline",className:"rounded-full border-border/60 text-[10px]",children:c.stockLabel})]}),e.jsx("h3",{className:"mt-1 text-lg font-bold tracking-tight text-foreground",children:c.name}),e.jsx("p",{className:"mt-0.5 line-clamp-1 text-xs text-muted-foreground",children:c.description}),e.jsxs("p",{className:"mt-1 text-[10px] text-muted-foreground",children:["ATK ",c.productCategory," · Njësia ",c.measurementUnit]})]}),e.jsxs("div",{className:"mt-6 flex w-full items-center justify-between",children:[e.jsxs("div",{className:"text-xl font-bold tracking-tight",children:[c.discountPercent>0&&e.jsxs("span",{className:"mr-2 text-xs text-muted-foreground line-through",children:["€",wr(hn(c))]}),"€",wr(bn(c))," me TVSH"]}),e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-2xl bg-primary text-primary-foreground opacity-0 transition-all group-hover:opacity-100",children:e.jsx(Ir,{className:"h-5 w-5"})})]})]},c.id)),x.length===0&&e.jsxs("div",{className:"col-span-full flex flex-col items-center justify-center py-20 text-center",children:[e.jsx("div",{className:"flex h-20 w-20 items-center justify-center rounded-full bg-muted",children:e.jsx(Ur,{className:"h-8 w-8 text-muted-foreground"})}),e.jsx("h4",{className:"mt-4 text-lg font-bold",children:"Nuk u gjet asgjë"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Provo një term tjetër kërkimi ose zgjidh një kategori."})]})]})})]}),e.jsxs("aside",{"data-pos-region":"checkout",className:"flex min-h-0 min-w-0 flex-col overflow-y-auto border-l border-border/60 bg-muted/5 p-6 max-xl:overflow-visible max-xl:border-l-0 max-xl:border-t",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:e.jsx(pn,{className:"h-5 w-5"})}),e.jsx("h2",{className:"text-xl font-bold tracking-tight",children:"Arkëtimi"})]}),e.jsxs(tn,{className:"rounded-full bg-primary/10 text-primary hover:bg-primary/20 transition-colors px-3 py-1 border-0",children:[_.itemCount," Artikuj"]})]}),e.jsxs("div",{className:"mb-6 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Klienti"}),e.jsx(vs,{companyId:b,open:kt,onOpenChange:h,requireDetails:Ft,onCreated:c=>Ce(c.id)})]}),e.jsxs($t,{value:pe,onValueChange:Ce,children:[e.jsx(Vt,{className:I("h-12 rounded-2xl border-border/60 bg-card",Ft&&pe==="walk-in"&&"border-amber-500 ring-1 ring-amber-300"),children:e.jsx(Ht,{placeholder:"Zgjidh klientin"})}),e.jsxs(Wt,{className:"rounded-2xl border-border/60",children:[Qe.allowsAnonymousCustomer&&e.jsx(Oe,{value:"walk-in",children:Qe.anonymousCustomerLabel}),q?.clients.map(c=>e.jsx(Oe,{value:c.id,children:c.name},c.id))]})]})]}),e.jsx(Aa,{className:"flex-1 -mx-2 px-2",children:e.jsxs("div",{className:"space-y-4",children:[A.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-center text-muted-foreground opacity-50",children:[e.jsx(mo,{className:"h-10 w-10 mb-4"}),e.jsx("p",{className:"text-sm font-medium",children:"Shporta është e zbrazët"})]}),A.map((c,p)=>e.jsxs("div",{className:"group relative rounded-3xl border border-border/40 bg-card p-4 transition-all hover:border-primary/20 hover:shadow-lg hover:shadow-primary/5",children:[e.jsxs("div",{className:"flex justify-between items-start mb-3",children:[e.jsxs("div",{className:"flex-1 pr-4",children:[e.jsx("h4",{className:"font-bold text-sm leading-tight",children:c.name}),e.jsx("span",{className:"text-[10px] text-muted-foreground uppercase tracking-wider",children:c.tab}),e.jsxs("span",{className:"block text-[9px] text-muted-foreground",children:["ATK ",c.productCategory," · Njësia ",c.measurementUnit]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2",children:[c.productDiscountAmount!=null?e.jsxs("span",{className:"rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-bold text-emerald-600",children:["−€",Number(c.productDiscountAmount||0).toFixed(4)," zbritje"]}):c.discountPercent>0?e.jsxs("span",{className:"rounded-full bg-emerald-500/10 px-2 py-0.5 text-[10px] font-bold text-emerald-600",children:["−",c.discountPercent,"% zbritje"]}):null,e.jsx(Ya,{item:c,setCart:g})]})]}),e.jsx("button",{onClick:()=>g(D=>D.filter(S=>S.id!==c.id)),"aria-label":"Hiqe nga shporta",className:"h-7 w-7 flex items-center justify-center rounded-full text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors",children:e.jsx(cn,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-1 rounded-2xl bg-muted/50 p-1",children:[e.jsx("button",{onClick:()=>g(D=>D.map(S=>S.id===c.id?{...S,quantity:Math.max(0,S.quantity-1),quantityExact:He(String(Math.max(0,S.quantity-1)),4)}:S).filter(S=>S.quantity>0)),"aria-label":"Zvogëlo sasinë",className:"flex h-8 w-8 items-center justify-center rounded-xl bg-card text-muted-foreground shadow-sm transition-colors hover:text-foreground",children:e.jsx(za,{className:"h-3.5 w-3.5"})}),e.jsx(nt,{type:"number",min:"1",step:"0.0001",value:Lr(c.quantity),onFocus:D=>D.currentTarget.select(),onChange:D=>{const S=Number(D.target.value);if(!Number.isFinite(S)||S<1)return;let T;
2try{T=He(D.target.value,4)}catch{return}g(W=>W.map(U=>U.id===c.id?{...U,quantity:S,quantityExact:T}:U))},"aria-label":`Ndrysho sasinë për ${c.name}`,className:"h-8 w-12 border-0 bg-transparent p-0 text-center text-sm font-bold shadow-none focus-visible:ring-1"}),e.jsx("button",{onClick:()=>g(D=>D.map(S=>S.id===c.id?{...S,quantity:S.quantity+1,quantityExact:He(String(S.quantity+1),4)}:S)),"aria-label":"Rrit sasinë",className:"flex h-8 w-8 items-center justify-center rounded-xl bg-card text-muted-foreground shadow-sm transition-colors hover:text-foreground",children:e.jsx(Ir,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("div",{className:"text-sm font-bold",children:[Ve(_.lines[p]?.total||0)," me TVSH"]}),e.jsxs("div",{className:"text-[10px] text-muted-foreground",children:["TVSH ",c.taxRate,"%"]})]})]})]},c.id))]})}),e.jsxs("div",{"data-pos-region":"checkout",className:"mt-6 space-y-6 border-t border-border/60 pt-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Lloji i Dokumentit ATK 2026"}),e.jsxs("div",{className:"flex h-12 items-center justify-center gap-2 rounded-2xl border border-emerald-500/30 bg-emerald-500/10 px-4 text-[10px] font-bold uppercase text-emerald-300",children:[e.jsx($r,{className:"h-3.5 w-3.5"}),"Vetëm kupon fiskal ATK"]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Metoda"}),e.jsx("button",{type:"button",onClick:()=>{Le(c=>{const p=!c;return p&&H(Ba(_.total)),p})},className:I("text-[9px] font-bold uppercase tracking-wider rounded-full px-2 py-0.5 transition-colors",ht?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground hover:bg-muted/80"),children:ht?"Ndarë":"Ndaj"})]}),ht?e.jsxs("div",{className:"space-y-2",children:[se.map((c,p)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs($t,{value:c.method,onValueChange:D=>{const S=[...se];S[p]={...S[p],method:D},H(S)},children:[e.jsx(Vt,{className:"h-10 rounded-xl border-border/60 bg-card flex-1",children:e.jsx(Ht,{})}),e.jsx(Wt,{children:Wn.map(D=>e.jsx(Oe,{value:D,children:Hn[D]},D))})]}),e.jsx(nt,{type:"number",step:"0.01",min:"0",value:c.amount,onChange:D=>{const S=[...se];S[p]={...S[p],amount:D.target.value},H(S)},placeholder:"0.00",className:"h-10 w-24 rounded-xl text-right"}),se.length>1&&e.jsx("button",{type:"button",onClick:()=>H(se.filter((D,S)=>S!==p)),className:"h-10 w-10 rounded-xl border border-border/60 text-muted-foreground hover:text-destructive","aria-label":"Fshij",children:"×"})]},p)),(()=>{const c=se.reduce((D,S)=>D+(Number(S.amount)||0),0),p=_.total-c;return e.jsxs("div",{className:"flex items-center justify-between text-[10px] font-semibold",children:[e.jsx("button",{type:"button",onClick:()=>H([...se,{method:se[se.length-1]?.method==="cash"?"credit_card":"cash",amount:p>0?p.toFixed(2):""}]),className:"text-primary uppercase tracking-wider hover:underline",children:"+ Shto metodë"}),e.jsx("span",{className:I("uppercase tracking-wider",Math.abs(p)<.01?"text-emerald-600":"text-muted-foreground"),children:Math.abs(p)<.01?"✓ Balancuar":p>0?`Mbetet: ${Ve(p)}`:`Tepricë: ${Ve(-p)}`})]})})()]}):e.jsxs($t,{value:V,onValueChange:c=>yt(c),children:[e.jsx(Vt,{className:"h-11 rounded-2xl border-border/60 bg-card",children:e.jsx(Ht,{})}),e.jsx(Wt,{children:Wn.map(c=>e.jsx(Oe,{value:c,children:Hn[c]},c))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Statusi"}),e.jsxs("div",{className:"flex h-11 rounded-2xl border border-border/60 bg-card p-1",children:[e.jsx("button",{onClick:()=>sr("paid"),className:I("flex-1 rounded-xl text-[10px] font-bold uppercase transition-all",ye==="paid"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground"),children:"Paguaj"}),e.jsx("button",{onClick:()=>sr("pending"),className:I("flex-1 rounded-xl text-[10px] font-bold uppercase transition-all",ye==="pending"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground"),children:"Pritje"})]})]})]}),(()=>{const c=ht?se.filter(S=>S.method==="cash").reduce((S,T)=>S+(Number(T.amount)||0),0):V==="cash"?_.total:0;if(c<=0||ye!=="paid")return null;const p=Number(bt)||0,D=p>0?p-c:0;return e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Të holla të pranuara (Kesh)"}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["Kesh për pagesë: ",Ve(c)]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(nt,{type:"number",step:"0.01",min:"0",value:bt,onCh
2ange:S=>Te(S.target.value),placeholder:"0.00",className:"h-10 rounded-xl text-right flex-1"}),e.jsx("button",{type:"button",onClick:()=>Te(c.toFixed(2)),className:"h-10 rounded-xl border border-border/60 px-3 text-[10px] font-bold uppercase tracking-wider text-muted-foreground hover:text-primary",children:"E saktë"})]}),p>0&&e.jsxs("div",{className:I("flex items-center justify-between text-[11px] font-bold uppercase tracking-wider",D<-.01?"text-destructive":D>.01?"text-emerald-600":"text-muted-foreground"),children:[e.jsx("span",{children:"Kusuri"}),e.jsx("span",{children:D<-.01?`Mungon ${Ve(-D)}`:Ve(Math.max(0,D))})]})]})})(),e.jsx(es,{choice:Pe,setChoice:Rt,email:vt,setEmail:jt,consent:_t,setConsent:Ot}),e.jsxs("div",{className:"rounded-[32px] bg-primary/5 p-6",children:[e.jsx(Bi,{percent:he,setPercent:Kt,amount:tt,setAmount:St}),e.jsxs("div",{className:"flex justify-between text-sm text-muted-foreground mb-2",children:[e.jsx("span",{children:"Nëntotali bruto"}),e.jsx("span",{children:Ve(_.grossSubtotal)})]}),e.jsxs("div",{className:"flex justify-between text-sm text-emerald-600 mb-2",children:[e.jsx("span",{children:"Zbritje"}),e.jsxs("span",{children:["−",Ve(_.discountTotal)]})]}),e.jsxs("div",{className:"flex justify-between text-sm text-muted-foreground mb-2",children:[e.jsx("span",{children:"Nëntotali pas zbritjes"}),e.jsx("span",{children:Ve(_.subtotal)})]}),e.jsxs("div",{className:"flex justify-between text-sm text-muted-foreground mb-2",children:[e.jsx("span",{children:"Përmbledhje TVSH (A / C / D / E)"}),e.jsx("span",{children:Ve(_.taxTotal)})]}),e.jsx("div",{className:"mb-4 grid grid-cols-4 gap-1 text-[10px] text-muted-foreground",children:["A","C","D","E"].map(c=>e.jsxs("span",{className:"rounded-md bg-muted/60 px-1.5 py-1 text-center tabular-nums",children:[c,": ",Ve(re[c])]},c))}),e.jsxs("div",{className:"flex justify-between items-end",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-widest text-primary",children:"Totali final"}),e.jsx("span",{className:"text-3xl font-black tracking-tighter text-primary",children:Ve(_.total)})]})]}),e.jsxs("div",{className:"grid grid-cols-[1fr_auto] gap-3",children:[e.jsx(rt,{onClick:be,disabled:A.length===0||Qt,className:"h-16 rounded-[24px] bg-primary text-lg font-bold shadow-xl shadow-primary/20 transition-all hover:scale-[1.02] active:scale-[0.98]",children:Qt?e.jsx(qt,{className:"h-6 w-6 animate-spin"}):ye==="paid"?"Përfundo Shitjen":"Ruaj në Pritje"}),e.jsxs(jn,{children:[e.jsx(yn,{asChild:!0,children:e.jsx(rt,{variant:"outline",onClick:()=>{ut.current=null,mr(!1),Dt.current=!1,g([])},disabled:A.length===0,"aria-label":"Pastro shportën",className:"h-16 w-16 rounded-[24px] border-border/60 text-muted-foreground hover:bg-destructive/10 hover:text-destructive",children:e.jsx(cn,{className:"h-6 w-6"})})}),e.jsx(kn,{side:"top",children:"Pastro shportën"})]})]}),e.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground px-2",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(ma,{className:"h-3 w-3"}),e.jsx("span",{children:"Hybrid ATK 2026 Ready"})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(En,{className:"h-3 w-3"}),e.jsx(ua,{to:"/dashboard/invoices",className:"hover:underline",children:"Historia"})]})]})]})]})]})}),e.jsxs("nav",{className:"fixed inset-x-0 bottom-0 z-50 grid grid-cols-4 gap-1 border-t border-border/60 bg-background/95 p-2 pb-[max(.5rem,env(safe-area-inset-bottom))] shadow-[0_-8px_24px_rgba(15,23,42,.12)] backdrop-blur xl:hidden",children:[e.jsx("button",{type:"button",onClick:()=>document.querySelector('[data-pos-region="checkout"]')?.scrollIntoView({behavior:"smooth",block:"start"}),className:"min-h-11 rounded-xl bg-primary px-2 text-[11px] font-black text-primary-foreground",children:"Pagesa"}),e.jsx("button",{type:"button",onClick:()=>ke("return"),disabled:et||!b,className:"min-h-11 rounded-xl border border-amber-300 bg-amber-50 px-2 text-[11px] font-bold text-amber-800 disabled:opacity-40",children:"Kthim"}),e.jsx("button",{type:"button",onClick:()=>ke("void"),disabled:et||!b,className:"min-h-11 rounded-xl border border-rose-300 bg-rose-50 px-2 text-[11px] font-bold text-rose-800 disabled:opacity-40",children:"Anulim"}),e.jsx("button",{type:"button",onClick:Yn,disabled:!A.length,className:"min-h-11 rounded-xl border border-border/60 bg-muted px-2 text-[11px] font-bold text-foreground disabled:opacity-40",children:"Pastro"})]}),e.jsx(ys,{open:z,onOpenChange:L,onDetected:X}),Me&&e.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center overflow-y-auto bg-background/80 p-3 backdrop-blur-md animate-in fade-in duration-300 sm:p-6",children:e.jsxs("div",{className:"max-h-[calc(100dvh-1.5rem)] w-full max-w-4xl overflow-y-auto p-1 sm:max-h-[calc(100dvh-3rem)] sm:p-0",children:[e.jsxs("div",{className:"mb-5 flex items-start justify-between gap-3 sm:mb-8",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h2",{className:"text-2xl font-bold tracking-tight sm:text-3xl",children:"Zgjidh Kategorinë"}),e.jsx("p",{className:"text-muted-foreground",children:"Ndërro hapësirën operative të punës"})]}),e.jsx(rt,{variant:"ghost",className:"rounded-full h-12 w-12",onClick:()=>Be(!1),"aria-label":"Mbyll",children:e.jsx(Er,{className:"h-5 w-5"})})]}),e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:hd.map(c=>{const p=pd[c.value],D=de===c.value;return e.jsxs("button",{onClick:()=>{const S=new URLSearchParams(B);S.set("category",c.value),$(S),Be(!1)},className:I("group relative flex flex-col items-start rounded-[32px] border p-6 text-left transition-all hover:-translate-y-1 hover:shadow-xl",D?"border-primary bg-primary/5 ring-2 ring-primary/20":"border-border/60 bg-card"),children:[e.jsx("div",{className:I("flex h-12 w-12 items-center justify-center rounded-2xl shadow-sm mb-4",D?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground group-hover:bg-primary group-hover:text-primary-foreground"),children:e.jsx(p,{className:"h-6 w-6"})}),e.jsx("h4",{className:"text-lg font-bold",children:c.label}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground leading-relaxed",children:c.subtitle}),e.jsxs("div",{className:"mt-6 flex w-full items-center justify-between",children:[e.jsx(tn,{variant:"outline",className:"rounded-full",children:c.value}),e.jsx(La,{className:"h-5 w-5 text-muted-foreground group-hover:text-primary transition-colors"})]})]},c.value)})})]})}),e.jsx(zn,{open:st!==null,onOpenChange:c=>{c||ke(null)},companyId:b,mode:st||"return"})]})})},Au=()=>{const{company:t}=ii(),{role:r}=oi(),[n]=Ma(),a=Kn(t?.effectiveBusinessCategory),l=Kn(n.get("category")),m=r==="staff"||r==="invoice_admin"||!n.get("category")?a:l;return e.jsx(Ad,{},m)};export{Au as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.