qBitrr2 5.8.7__py3-none-any.whl → 5.8.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{j as e,u as ts,h as ns,i as ls,k as is,l as Be,m as rs,I as _e,R as Te,n as Ge,o as Ye}from"./app.js";import{r as s,u as ke,g as Ie,f as we,a as os,b as js,c as ps}from"./table.js";import{u as Ee}from"./useInterval.js";import"./vendor.js";function Ns({data:c,columns:l,getRowKey:d}){const f=ke({data:c,columns:l,getCoreRowModel:Ie()});return e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:f.getHeaderGroups().map(j=>e.jsx("tr",{children:j.headers.map(C=>e.jsx("th",{children:C.isPlaceholder?null:we(C.column.columnDef.header,C.getContext())},C.id))},j.id))}),e.jsx("tbody",{children:f.getRowModel().rows.map(j=>{const C=d?d(j.original):j.id;return e.jsx("tr",{children:j.getVisibleCells().map(w=>e.jsx("td",{"data-label":String(w.column.columnDef.header),children:we(w.column.columnDef.cell,w.getContext())},w.id))},C)})})]})})}const ys=s.memo(Ns,(c,l)=>c.data===l.data&&c.columns===l.columns);function vs(c){let l=2166136261;for(let d=0;d<c.length;d++)l^=c.charCodeAt(d),l+=(l<<1)+(l<<4)+(l<<7)+(l<<8)+(l<<24);return(l>>>0).toString(36)}function as(c,l){const d=l.map(f=>{const j=c[f];return j==null?"":typeof j=="boolean"?j?"1":"0":typeof j=="object"?JSON.stringify(j):String(j)});return vs(d.join("|"))}function Ss(c,l,d,f){const j=[],C=[],w=[],b=new Set;for(const i of l){const D=d(i),W=as(i,f);b.add(D);const $=c.byId.get(D),S=c.byHash.get(D);$?S!==W&&C.push(i):j.push(i)}for(const i of c.allIds)b.has(i)||w.push(i);const m=l.length-j.length-C.length,u=j.length>0||C.length>0||w.length>0;return{added:j,updated:C,removed:w,unchanged:m,hasChanges:u}}function Rs(c,l,d,f){if(!l.hasChanges)return c;const j=new Map(c.byId),C=new Map(c.byHash),w=[...c.allIds];for(const b of l.added){const m=d(b),u=as(b,f);j.set(m,b),C.set(m,u),w.push(m)}for(const b of l.updated){const m=d(b),u=as(b,f);j.set(m,b),C.set(m,u)}for(const b of l.removed){j.delete(b),C.delete(b);const m=w.indexOf(b);m!==-1&&w.splice(m,1)}return{byId:j,byHash:C,allIds:w,lastUpdate:Date.now()}}function Je(c){return c.allIds.map(l=>c.byId.get(l)).filter(Boolean)}function gs(){return{byId:new Map,byHash:new Map,allIds:[],lastUpdate:0}}function Le(c){const{getKey:l,hashFields:d}=c,f=s.useRef(gs()),[j,C]=s.useState(0),w=s.useCallback(u=>{const i=Ss(f.current,u,l,d);if(!i.hasChanges)return{data:Je(f.current),hasChanges:!1,changes:null,lastUpdate:f.current.lastUpdate};const D=Rs(f.current,i,l,d);return f.current=D,C(D.lastUpdate),{data:Je(D),hasChanges:!0,changes:i,lastUpdate:D.lastUpdate}},[l,d]),b=s.useCallback(()=>Je(f.current),[]),m=s.useCallback(()=>{f.current=gs(),C(0)},[]);return{syncData:w,getData:b,reset:m,lastUpdate:j}}const Xe=50,We=50,us=500,Cs=s.memo(function({loading:l,rows:d,total:f,page:j,totalPages:C,onPageChange:w,onRefresh:b,lastUpdated:m,summary:u,instanceCount:i,isAggFiltered:D=!1}){const W=s.useMemo(()=>[...i>1?[{accessorKey:"__instance",header:"Instance",size:150}]:[],{accessorKey:"title",header:"Title",cell:$=>$.getValue()},{accessorKey:"year",header:"Year",size:80},{accessorKey:"monitored",header:"Monitored",cell:$=>{const S=$.getValue();return e.jsx("span",{className:`track-status ${S?"available":"missing"}`,children:S?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:$=>{const S=$.getValue();return e.jsx("span",{className:`track-status ${S?"available":"missing"}`,children:S?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:$=>$.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:$=>{const S=$.getValue();return S?e.jsx("span",{className:"table-badge table-badge-reason",children:S}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[i]);return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated movies across all instances"," ",m?`(updated ${m})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",u.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",u.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",u.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",u.total.toLocaleString(void 0,{maximumFractionDigits:0}),D&&f<u.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",f.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",u.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:b,disabled:l,children:[e.jsx(_e,{src:Te}),"Refresh"]})]}),l?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Radarr library…"]}):f?e.jsx(ys,{data:d,columns:W,getRowKey:$=>`${$.__instance}-${$.title}-${$.year}`}):e.jsx("div",{className:"hint",children:"No movies found."}),f>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",j+1," of ",C," (",f.toLocaleString()," items · page size"," ",We,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>w(Math.max(0,j-1)),disabled:j===0||l,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>w(Math.min(C-1,j+1)),disabled:j>=C-1||l,children:"Next"})]})]})]})}),Fs=s.memo(function({loading:l,data:d,page:f,totalPages:j,pageSize:C,allMovies:w,onlyMissing:b,reasonFilter:m,onPageChange:u,onRestart:i,lastUpdated:D}){const W=s.useMemo(()=>{let g=w;return b&&(g=g.filter(h=>!h.hasFile)),g},[w,b]),$=s.useMemo(()=>m==="all"?W:m==="Not being searched"?W.filter(g=>g.reason==="Not being searched"||!g.reason):W.filter(g=>g.reason===m),[W,m]),S=s.useMemo(()=>w.length,[w]),J=m!=="all"||b,ce=$.length,re=s.useMemo(()=>[{accessorKey:"title",header:"Title",cell:g=>g.getValue()},{accessorKey:"year",header:"Year",size:80},{accessorKey:"monitored",header:"Monitored",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:g=>g.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:g=>{const h=g.getValue();return h?e.jsx("span",{className:"table-badge table-badge-reason",children:h}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[]),te=ke({data:$.slice(f*C,f*C+C),columns:re,getCoreRowModel:Ie(),getSortedRowModel:os()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[d?.counts?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",(d.counts.available??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",(d.counts.monitored??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",((d.counts.monitored??0)-(d.counts.available??0)).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",S.toLocaleString(void 0,{maximumFractionDigits:0}),J&&ce<S&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",ce.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",S.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading movie information...",D?` (updated ${D})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:i,disabled:l,children:[e.jsx(_e,{src:Te}),"Restart"]})]}),l?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading…"]}):w.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:te.getHeaderGroups().map(g=>e.jsx("tr",{children:g.headers.map(h=>e.jsx("th",{children:h.isPlaceholder?null:we(h.column.columnDef.header,h.getContext())},h.id))},g.id))}),e.jsx("tbody",{children:te.getRowModel().rows.map(g=>{const h=g.original,z=`${h.title}-${h.year}`;return e.jsx("tr",{children:g.getVisibleCells().map(P=>e.jsx("td",{"data-label":String(P.column.columnDef.header),children:we(P.column.columnDef.cell,P.getContext())},P.id))},z)})})]})}):e.jsx("div",{className:"hint",children:"No movies found."}),$.length>C&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",f+1," of ",j," (",$.length.toLocaleString()," items · page size"," ",C,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>u(Math.max(0,f-1)),disabled:f===0||l,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>u(Math.min(j-1,f+1)),disabled:f>=j-1||l,children:"Next"})]})]})]})});function ws({active:c}){const{push:l}=ts(),{value:d,setValue:f,register:j,clearHandler:C}=ns(),{liveArr:w}=ls(),[b,m]=s.useState([]),[u,i]=s.useState(""),[D,W]=s.useState(null),[$,S]=s.useState(0),[J,ce]=s.useState(""),[re,te]=s.useState(!1),[g,h]=s.useState(null),[z,P]=s.useState({}),[K,H]=s.useState(Xe),[q,ne]=s.useState(1),B=s.useRef(""),o=s.useRef({}),x=s.useRef(d),T=s.useRef(!1),y=Le({getKey:a=>`${a.title}-${a.year}`,hashFields:["title","year","hasFile","monitored","reason"]}),[p,r]=s.useState([]),[N,R]=s.useState(!1),[M,L]=s.useState(0),[Z,ue]=s.useState(""),[le,he]=s.useState(null),ee=Le({getKey:a=>`${a.__instance}-${a.title}-${a.year}`,hashFields:["__instance","title","year","hasFile","monitored","reason"]}),[oe,Me]=s.useState({key:"__instance",direction:"asc"}),[fe,ze]=s.useState(!1),[G,Ce]=s.useState("all"),[Fe,se]=s.useState({available:0,monitored:0,missing:0,total:0}),$e=s.useCallback(async()=>{try{const a=await is();a.ready===!1&&!T.current?(T.current=!0,l("Radarr backend is still initialising. Check the logs if this persists.","info")):a.ready&&(T.current=!0);const n=(a.arr||[]).filter(v=>v.type==="radarr");if(m(n),!n.length){i("aggregate"),W(null),r([]),se({available:0,monitored:0,missing:0,total:0});return}u===""?i(n.length===1?n[0].category:"aggregate"):u!=="aggregate"&&!n.some(v=>v.category===u)&&i(n[0].category)}catch(a){l(a instanceof Error?a.message:"Unable to load Radarr instances","error")}},[l,u]),je=s.useCallback(async(a,n,v,V,_)=>{if(V.length)try{const E=[];for(const F of V){const k=await Be(a,F,v,n),Q=k.page??F;if(E.push({page:Q,movies:k.movies??[]}),B.current!==_)return}if(B.current!==_)return;P(F=>{const k={...F};let Q=!1;for(const{page:A,movies:Y}of E){const I=y.syncData(Y);I.hasChanges&&(k[A]=I.data,Q=!0)}return o.current=k,Q?k:F})}catch(E){l(E instanceof Error?E.message:`Failed to load additional pages for ${a}`,"error")}},[l]),be=s.useCallback(async(a,n,v,V={})=>{const _=V.preloadAll!==!1;(V.showLoading??!0)&&te(!0);try{const F=`${a}::${v}`,k=B.current!==F;k&&(B.current=F,P(()=>(o.current={},{})));const Q=await Be(a,n,Xe,v);W(Q);const A=Q.page??n;S(A),ce(v);const Y=Q.page_size??Xe,I=Q.total??(Q.movies??[]).length,ie=Math.max(1,Math.ceil((I||0)/Y));H(Y),ne(ie);const de=Q.movies??[],X=k?{}:o.current,U=y.syncData(de),me=U.hasChanges;if(k&&y.reset(),(k||me)&&(P(O=>{const xe={...k?{}:O,[A]:U.data};return o.current=xe,xe}),h(new Date().toLocaleTimeString())),_){const O=[];for(let ge=0;ge<ie;ge+=1)ge!==A&&(X[ge]||O.push(ge));je(a,v,Y,O,F)}}catch(F){l(F instanceof Error?F.message:`Failed to load ${a} movies`,"error")}finally{te(!1)}},[l,je]),ve=s.useCallback(async a=>{if(!b.length){r([]),se({available:0,monitored:0,missing:0,total:0});return}(a?.showLoading??!0)&&R(!0);try{const v=[];let V=0,_=0;for(const A of b){let Y=0,I=!1;const ie=A.name||A.category;for(;Y<100;){const de=await Be(A.category,Y,us,"");if(!I){const U=de.counts;U&&(V+=U.available??0,_+=U.monitored??0),I=!0}const X=de.movies??[];if(X.forEach(U=>{v.push({...U,__instance:ie})}),!X.length||X.length<us)break;Y+=1}}const E=ee.syncData(v),F=E.hasChanges;F&&r(E.data);const k={available:V,monitored:_,missing:v.length-V,total:v.length},Q=Fe.available!==k.available||Fe.monitored!==k.monitored||Fe.missing!==k.missing||Fe.total!==k.total;Q&&se(k),Z!==d&&(L(0),ue(d)),(F||Q)&&he(new Date().toLocaleTimeString())}catch(v){r([]),se({available:0,monitored:0,missing:0,total:0}),l(v instanceof Error?v.message:"Failed to load aggregated Radarr data","error")}finally{R(!1)}},[b,d,l,Z]);s.useEffect(()=>{c&&$e()},[c,$e]),s.useEffect(()=>{if(!c||!u||u==="aggregate")return;o.current={},P({}),ne(1),S(0);const a=x.current;be(u,0,a,{preloadAll:!0,showLoading:!0})},[c,u,be]),s.useEffect(()=>{c&&u==="aggregate"&&ve()},[c,u,ve]),Ee(()=>{u==="aggregate"&&w&&ve({showLoading:!1})},u==="aggregate"&&w?1e3:null),s.useEffect(()=>{if(!c)return;const a=n=>{u==="aggregate"?(ue(n),L(0)):u&&(S(0),be(u,0,n,{preloadAll:!0,showLoading:!0}))};return j(a),()=>{C(a)}},[c,u,j,C,be]),Ee(()=>{if(u&&u!=="aggregate"){if(x.current?.trim?.()||"")return;be(u,$,J,{preloadAll:!1,showLoading:!1})}},c&&u&&u!=="aggregate"&&w?1e3:null),s.useEffect(()=>{x.current=d},[d]),s.useEffect(()=>{u==="aggregate"&&ue(d)},[u,d]);const Ne=s.useMemo(()=>{let a=p;if(Z){const n=Z.toLowerCase();a=a.filter(v=>{const V=(v.title??"").toString().toLowerCase(),_=(v.__instance??"").toLowerCase();return V.includes(n)||_.includes(n)})}return fe&&(a=a.filter(n=>!n.hasFile)),G!=="all"&&(G==="Not being searched"?a=a.filter(n=>n.reason==="Not being searched"||!n.reason):a=a.filter(n=>n.reason===G)),a},[p,Z,fe,G]),ye=!!Z||G!=="all",Se=s.useMemo(()=>{const a=[...Ne],n=(v,V)=>{switch(V){case"__instance":return(v.__instance||"").toLowerCase();case"title":return(v.title||"").toLowerCase();case"year":return v.year??0;case"monitored":return v.monitored?1:0;case"hasFile":return v.hasFile?1:0;default:return""}};return a.sort((v,V)=>{const _=n(v,oe.key),E=n(V,oe.key);let F=0;return typeof _=="number"&&typeof E=="number"?F=_-E:typeof _=="string"&&typeof E=="string"?F=_.localeCompare(E):F=String(_).localeCompare(String(E)),oe.direction==="asc"?F:-F}),a},[Ne,oe]),Ke=Math.max(1,Math.ceil(Se.length/We)),Ae=s.useMemo(()=>Se.slice(M*We,M*We+We),[Se,M]),qe=s.useMemo(()=>{const a=Object.keys(z).map(Number).sort((v,V)=>v-V),n=[];return a.forEach(v=>{z[v]&&n.push(...z[v])}),n},[z]),Ue=s.useCallback(async()=>{if(!(!u||u==="aggregate"))try{await rs(u),l(`Restarted ${u}`,"success")}catch(a){l(a instanceof Error?a.message:`Failed to restart ${u}`,"error")}},[u,l]),Oe=s.useCallback(()=>{ve({showLoading:!0})},[ve]),He=s.useCallback(a=>{Me(n=>n.key===a?{key:a,direction:n.direction==="asc"?"desc":"asc"}:{key:a,direction:"asc"})},[]),Ve=s.useCallback(()=>{u&&u!=="aggregate"&&be(u,$,J,{preloadAll:!1,showLoading:!0})},[u,$,J,be]),De=s.useCallback(a=>{const n=a.target.value||"aggregate";i(n),n!=="aggregate"&&f("")},[i,f]),t=u==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Radarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[b.length>1&&e.jsx("button",{className:`btn ${t?"active":""}`,onClick:()=>i("aggregate"),children:"All Radarr"}),b.map(a=>e.jsx("button",{className:`btn ghost ${u===a.category?"active":""}`,onClick:()=>{i(a.category),f("")},children:a.name||a.category},a.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:u||"aggregate",onChange:De,disabled:!b.length,children:[b.length>1&&e.jsx("option",{value:"aggregate",children:"All Radarr"}),b.map(a=>e.jsx("option",{value:a.category,children:a.name||a.category},a.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter movies",value:d,onChange:a=>f(a.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:a=>{const n=a.target.value;ze(n==="missing")},value:fe?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Movies"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:a=>Ce(a.target.value),value:G,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),t?e.jsx(Cs,{loading:N,rows:Ae,total:Se.length,page:M,totalPages:Ke,onPageChange:L,onRefresh:Oe,lastUpdated:le,sort:oe,onSort:He,summary:Fe,instanceCount:b.length,isAggFiltered:ye}):e.jsx(Fs,{loading:re,data:D,page:$,totalPages:q,pageSize:K,allMovies:qe,onlyMissing:fe,reasonFilter:G,onPageChange:a=>{S(a),be(u,a,J,{preloadAll:!0})},onRefresh:Ve,onRestart:()=>{Ue()},lastUpdated:g})]})]})})]})}const es=25,Ms=50,hs=200;function Ps(c,l){if(!l)return c;const d=[];for(const f of c){const j=f.seasons??{},C={};for(const[w,b]of Object.entries(j)){const m=(b.episodes??[]).filter(u=>!u.hasFile);m.length&&(C[w]={...b,episodes:m})}Object.keys(C).length!==0&&d.push({...f,seasons:C})}return d}function Ze(c,l){return JSON.stringify(Ps(c,l))}function As({active:c}){const{push:l}=ts(),{value:d,setValue:f,register:j,clearHandler:C}=ns(),{liveArr:w,groupSonarr:b}=ls(),[m,u]=s.useState([]),[i,D]=s.useState(""),[W,$]=s.useState(null),[S,J]=s.useState(0),[ce,re]=s.useState(""),[te,g]=s.useState(!1),[h,z]=s.useState(null),[P,K]=s.useState({}),H=s.useRef({}),q=s.useRef(null),ne=s.useRef(""),[B,o]=s.useState(es),[x,T]=s.useState(1),[y,p]=s.useState(0),r=s.useRef(d),N=s.useRef(!1),R=s.useRef(i),[M,L]=s.useState([]),[Z,ue]=s.useState(!1),[le,he]=s.useState(0),[ee,oe]=s.useState(""),[Me,fe]=s.useState(null),ze=Le({getKey:t=>`${t.__instance}-${t.series}-${t.season}-${t.episode}`,hashFields:["__instance","series","season","episode","title","hasFile","monitored","airDate","reason","qualityProfileId","qualityProfileName"]}),[G,Ce]=s.useState(!1),Fe=s.useRef(G),[se,$e]=s.useState("all"),[je,be]=s.useState({available:0,monitored:0,missing:0,total:0}),ve=s.useCallback(async()=>{try{const t=await is();t.ready===!1&&!N.current?(N.current=!0,l("Sonarr backend is still initialising. Check the logs if this persists.","info")):t.ready&&(N.current=!0);const a=(t.arr||[]).filter(n=>n.type==="sonarr");if(u(a),!a.length){D("aggregate"),$(null),L([]),be({available:0,monitored:0,missing:0,total:0});return}i===""?D(a.length===1?a[0].category:"aggregate"):i!=="aggregate"&&!a.some(n=>n.category===i)&&D(a[0].category)}catch(t){l(t instanceof Error?t.message:"Unable to load Sonarr instances","error")}},[l,i]),Ne=s.useCallback(async(t,a,n,v={})=>{const{preloadAll:V=!0,showLoading:_=!0,missingOnly:E}=v,F=E??G;_&&g(!0);try{const k=`${t}::${n}::${F?"missing":"all"}`,Q=ne.current!==k;Q&&(ne.current=k,K(()=>(H.current={},{})),p(0),T(1));const A=await Ge(t,a,es,n,{missingOnly:F});console.log(`[Sonarr Instance] Response for ${t} page ${a}:`,{total:A.total,page:A.page,page_size:A.page_size,series_count:A.series?.length??0,counts:A.counts,missingOnly:F,firstSeries:A.series?.[0]?{title:A.series[0].series?.title,seasonsCount:Object.keys(A.series[0].seasons??{}).length,firstSeasonEpisodes:Object.values(A.series[0].seasons??{})[0]?.episodes?.length??0}:null});const Y=A.page??a,I=A.page_size??es,ie=A.total??(A.series??[]).length,de=Math.max(1,Math.ceil((ie||0)/I)),X=A.series??[],U=Q?{}:H.current,me={...U,[Y]:X},O=Ze(U[Y]??[],F),ge=Ze(X,F),xe=Q||O!==ge;if(H.current=me,xe&&K(me),$(ae=>{const pe=ae?.counts??null,Pe=A.counts??null;return!ae||ae.total!==A.total||ae.page!==A.page||ae.page_size!==A.page_size||(pe?.available??null)!==(Pe?.available??null)||(pe?.monitored??null)!==(Pe?.monitored??null)||(pe?.missing??null)!==(Pe?.missing??null)||xe?(q.current=A,A):ae}),J(ae=>ae===Y?ae:Y),re(ae=>ae===n?ae:n),o(ae=>ae===I?ae:I),T(ae=>ae===de?ae:de),p(ae=>ae===ie?ae:ie),xe&&z(new Date().toLocaleTimeString()),V){const ae=[];for(let pe=0;pe<de;pe+=1)pe!==Y&&(me[pe]||ae.push(pe));for(const pe of ae)try{const Pe=await Ge(t,pe,I,n,{missingOnly:F});if(ne.current!==k)break;const Re=Pe.page??pe,Qe=Pe.series??[],cs=H.current,fs=Ze(cs[Re]??[],F),bs=Ze(Qe,F);if(fs===bs){H.current={...cs,[Re]:Qe};continue}K(xs=>{const ds={...xs,[Re]:Qe};return H.current=ds,ds})}catch{break}}}catch(k){l(k instanceof Error?k.message:`Failed to load ${t} series`,"error")}finally{_&&g(!1)}},[l,G]),ye=s.useCallback(async t=>{if(!m.length){L([]),be({available:0,monitored:0,missing:0,total:0});return}console.log(`[Sonarr Aggregate] Starting aggregation for ${m.length} instances`),(t?.showLoading??!0)&&ue(!0);try{const n=[];let v=0,V=0,_=0;for(const Y of m){let I=0,ie=!1;const de=Y.name||Y.category;for(console.log(`[Sonarr Aggregate] Processing instance: ${de}`);I<200;){const X=await Ge(Y.category,I,hs,"",{missingOnly:G});if(console.log(`[Sonarr Aggregate] Response for ${de} page ${I}:`,{total:X.total,page:X.page,page_size:X.page_size,series_count:X.series?.length??0,counts:X.counts,missingOnly:G,firstSeries:X.series?.[0]?{title:X.series[0].series?.title,seasonsCount:Object.keys(X.series[0].seasons??{}).length,firstSeasonEpisodes:Object.values(X.series[0].seasons??{})[0]?.episodes?.length??0,firstEpisode:Object.values(X.series[0].seasons??{})[0]?.episodes?.[0]}:null}),!ie){const O=X.counts;O&&(v+=O.available??0,V+=O.monitored??0,_+=O.missing??0),ie=!0}const U=X.series??[];let me=0;if(U.forEach(O=>{let ge=0;Object.values(O.seasons??{}).forEach(xe=>{ge+=(xe.episodes??[]).length}),me+=ge}),console.log(`[Sonarr Aggregate] Instance: ${de}, Page: ${I}, Series count: ${U.length}, Total episodes so far: ${n.length}, Episodes in this response: ${me}`),U.forEach(O=>{const ge=O.series?.title||"",xe=O.series?.qualityProfileId??null,ae=O.series?.qualityProfileName??null;Object.entries(O.seasons??{}).forEach(([pe,Pe])=>{(Pe.episodes??[]).forEach(Re=>{const Qe=Re.reason??null;n.push({__instance:de,series:ge,season:pe,episode:Re.episodeNumber??"",title:Re.title??"",monitored:!!Re.monitored,hasFile:!!Re.hasFile,airDate:Re.airDateUtc??"",reason:Qe,qualityProfileId:xe,qualityProfileName:ae})})})}),!U.length||U.length<hs){console.log(`[Sonarr Aggregate] Breaking pagination for ${de} - series.length=${U.length}`);break}I+=1}}const E=ze.syncData(n),F=E.hasChanges,k=new Map;n.forEach(Y=>{const I=Y.reason||"null/empty";k.set(I,(k.get(I)||0)+1)}),console.log("[Sonarr Aggregate] Reason distribution:",Object.fromEntries(k)),F?(console.log(`[Sonarr Aggregate] Data changed, updating from ${M.length} to ${n.length} episodes`),L(E.data)):console.log("[Sonarr Aggregate] Data unchanged, skipping update");const Q={available:v,monitored:V,missing:_,total:n.length},A=je.available!==Q.available||je.monitored!==Q.monitored||je.missing!==Q.missing||je.total!==Q.total;A&&be(Q),ee!==d&&(he(0),oe(d)),(F||A)&&fe(new Date().toLocaleTimeString())}catch(n){L([]),be({available:0,monitored:0,missing:0,total:0}),l(n instanceof Error?n.message:"Failed to load aggregated Sonarr data","error")}finally{ue(!1)}},[m,d,l,G,ee]);s.useEffect(()=>{c&&ve()},[c,ve]),s.useEffect(()=>{if(!c||!i||i==="aggregate")return;const t=R.current!==i,a=Fe.current!==G;t&&(J(0),R.current=i),a&&(Fe.current=G);const n=r.current;Ne(i,t?0:S,n,{preloadAll:!0,showLoading:!0,missingOnly:G})},[c,i,G,Ne,S]),s.useEffect(()=>{c&&i==="aggregate"&&ye()},[c,i,ye]),Ee(()=>{i==="aggregate"&&w&&ye({showLoading:!1})},i==="aggregate"&&w?1e3:null),s.useEffect(()=>{if(!c)return;const t=a=>{i==="aggregate"?(oe(a),he(0)):i&&(J(0),Ne(i,0,a,{preloadAll:!0,showLoading:!0,missingOnly:G}))};return j(t),()=>C(t)},[c,i,j,C,Ne,G]),Ee(()=>{if(i&&i!=="aggregate"){if(r.current?.trim?.()||"")return;Ne(i,S,ce,{preloadAll:!1,showLoading:!1,missingOnly:G})}},c&&i&&i!=="aggregate"&&w?1e3:null),s.useEffect(()=>{r.current=d},[d]),s.useEffect(()=>{i==="aggregate"&&oe(d)},[i,d]);const Se=s.useMemo(()=>{let t=M;if(ee){const a=ee.toLowerCase();t=t.filter(n=>n.series.toLowerCase().includes(a)||n.title.toLowerCase().includes(a)||n.__instance.toLowerCase().includes(a))}if(G&&(t=t.filter(a=>!a.hasFile)),se!=="all"){console.log(`[Sonarr Filter] Applying reason filter: "${se}"`);const a=t.length;se==="Not being searched"?t=t.filter(n=>n.reason==="Not being searched"||!n.reason):t=t.filter(n=>n.reason===se),console.log(`[Sonarr Filter] Filtered from ${a} to ${t.length} episodes for reason "${se}"`),t.length<10&&console.log("[Sonarr Filter] Sample filtered rows:",t.slice(0,5).map(n=>({series:n.series,episode:n.episode,reason:n.reason})))}return t},[M,ee,G,se]),Ke=!!ee||G||se!=="all",Ae=Se,qe=Math.max(1,Math.ceil(Ae.length/Ms)),Ue=P[S]??[],Oe=s.useMemo(()=>{const t=Object.keys(P).map(Number).sort((n,v)=>n-v),a=[];return t.forEach(n=>{P[n]&&a.push(...P[n])}),a},[P]),He=s.useCallback(async()=>{if(!(!i||i==="aggregate"))try{await rs(i),l(`Restarted ${i}`,"success")}catch(t){l(t instanceof Error?t.message:`Failed to restart ${i}`,"error")}},[i,l]),Ve=s.useCallback(t=>{const a=t.target.value||"aggregate";D(a),a!=="aggregate"&&f("")},[D,f]),De=i==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Sonarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[m.length>1&&e.jsx("button",{className:`btn ${De?"active":""}`,onClick:()=>D("aggregate"),children:"All Sonarr"}),m.map(t=>e.jsx("button",{className:`btn ghost ${i===t.category?"active":""}`,onClick:()=>{D(t.category),f("")},children:t.name||t.category},t.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:i||"aggregate",onChange:Ve,disabled:!m.length,children:[m.length>1&&e.jsx("option",{value:"aggregate",children:"All Sonarr"}),m.map(t=>e.jsx("option",{value:t.category,children:t.name||t.category},t.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter series or episodes",value:d,onChange:t=>f(t.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:t=>{const n=t.target.value==="missing";Ce(n),i&&i!=="aggregate"&&Ne(i,0,r.current||"",{preloadAll:!0,showLoading:!0,missingOnly:n})},value:G?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Episodes"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:t=>$e(t.target.value),value:se,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),De?e.jsx(Ds,{loading:Z,rows:Ae,total:Ae.length,page:le,totalPages:qe,onPageChange:he,onRefresh:()=>{ye({showLoading:!0})},lastUpdated:Me,groupSonarr:b,summary:je,instanceCount:m.length,isAggFiltered:Ke}):e.jsx($s,{loading:te,counts:W?.counts??null,series:b?Ue:Oe,page:S,pageSize:B,totalPages:x,totalItems:y,onlyMissing:G,reasonFilter:se,onPageChange:t=>{J(t),Ne(i,t,ce,{preloadAll:!1,showLoading:!0,missingOnly:G})},onRestart:()=>{He()},lastUpdated:h,groupSonarr:b,instances:m,selection:i})]})]})})]})}function Ds({loading:c,rows:l,page:d,totalPages:f,onPageChange:j,onRefresh:C,lastUpdated:w,groupSonarr:b,summary:m,instanceCount:u,isAggFiltered:i=!1}){const D=s.useRef([]),W=s.useRef([]),$=s.useRef(new Map),S=s.useMemo(()=>{if(l===D.current)return W.current;const o=new Map;l.forEach(y=>{const p=y.__instance,r=y.series,N=String(y.season);o.has(p)||o.set(p,new Map);const R=o.get(p);R.has(r)||R.set(r,new Map);const M=R.get(r);M.has(N)||M.set(N,[]),M.get(N).push(y)});const x=[],T=new Map;return o.forEach((y,p)=>{y.forEach((r,N)=>{const R=`${p}-${N}`,M=new Set;r.forEach((le,he)=>{le.forEach(ee=>{const oe=`${he}-${ee.episode}`;M.add(oe)})});const L=$.current.get(R);if(L&&L.episodeKeys.size===M.size){let le=!0;for(const he of M)if(!L.episodeKeys.has(he)){le=!1;break}if(le){x.push(L),T.set(R,L);return}}const Z=Array.from(r.values())[0]?.[0];console.log(`[Sonarr Grouped] Series: ${N}, QualityProfile: ${Z?.qualityProfileName}, FirstEpisode:`,Z);const ue={instance:p,series:N,qualityProfileId:Z?.qualityProfileId,qualityProfileName:Z?.qualityProfileName,subRows:Array.from(r.entries()).map(([le,he])=>({seasonNumber:le,isSeason:!0,subRows:he.map(ee=>({...ee,isEpisode:!0}))})),episodeKeys:M};x.push(ue),T.set(R,ue)})}),D.current=l,W.current=x,$.current=T,x},[l]),J=s.useMemo(()=>S.slice(d*50,(d+1)*50),[S,d]),ce=s.useMemo(()=>l.slice(d*50,(d+1)*50),[l,d]),re=b?J:ce,te=s.useMemo(()=>[{accessorKey:"title",header:"Title",cell:({row:o})=>{if(o.original.isEpisode)return o.original.title;if(o.original.isSeason)return`Season ${o.original.seasonNumber}`;const x=[o.original.series];return o.original.instance&&x.push(`(${o.original.instance})`),o.original.qualityProfileName&&x.push(`• ${o.original.qualityProfileName}`),x.join(" ")}},{accessorKey:"monitored",header:"Monitored",cell:({row:o})=>{const x=(o.original.isEpisode,o.original.monitored);return e.jsx("span",{className:`track-status ${x?"available":"missing"}`,children:x?"✓":"✗"})}},{accessorKey:"hasFile",header:"Has File",cell:({row:o})=>{if(o.original.isEpisode){const x=o.original.hasFile;return e.jsx("span",{className:`track-status ${x?"available":"missing"}`,children:x?"✓":"✗"})}return null}},{accessorKey:"airDate",header:"Air Date",cell:({row:o})=>o.original.isEpisode?o.original.airDate||"—":null}],[]),g=s.useMemo(()=>[...u>1?[{accessorKey:"__instance",header:"Instance"}]:[],{accessorKey:"series",header:"Series"},{accessorKey:"season",header:"Season"},{accessorKey:"episode",header:"Episode"},{accessorKey:"title",header:"Title"},{accessorKey:"monitored",header:"Monitored",cell:({getValue:o})=>{const x=o();return e.jsx("span",{className:`track-status ${x?"available":"missing"}`,children:x?"✓":"✗"})}},{accessorKey:"hasFile",header:"Has File",cell:({getValue:o})=>{const x=o();return e.jsx("span",{className:`track-status ${x?"available":"missing"}`,children:x?"✓":"✗"})}},{accessorKey:"airDate",header:"Air Date",cell:({getValue:o})=>o()||"—"},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:({getValue:o})=>o()||"—"},{accessorKey:"reason",header:"Reason",cell:({getValue:o})=>{const x=o();return x?e.jsx("span",{className:"table-badge table-badge-reason",children:x}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})}}],[u]),h=b?te:g,z=ke({data:re,columns:h,getCoreRowModel:Ie(),getExpandedRowModel:js()}),P=ke({data:re,columns:h,getCoreRowModel:Ie(),getSortedRowModel:os(),getPaginationRowModel:ps(),state:{pagination:{pageIndex:d,pageSize:50}},manualPagination:!0,pageCount:f}),K=b?z:P,H=50,q=Math.ceil(b?S.length/H:l.length/H),ne=Math.min(d,Math.max(0,q-1)),B=b?`${S.length} series`:l.length.toLocaleString();return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated episodes across all instances"," ",w?`(updated ${w})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",m.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",m.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",m.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total Episodes:"})," ",m.total.toLocaleString(void 0,{maximumFractionDigits:0}),i&&l.length<m.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",l.length.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",m.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:C,disabled:c,children:[e.jsx(_e,{src:Te}),"Refresh"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Sonarr library…"]}):b?e.jsx("div",{className:"sonarr-hierarchical-view",children:J.map(o=>{console.log(`[Sonarr Render] Series: ${o.series}, QualityProfile: ${o.qualityProfileName}`);let x=0;return o.subRows.forEach(T=>{x+=T.subRows.length}),e.jsxs("details",{className:"series-details",children:[e.jsxs("summary",{className:"series-summary",children:[e.jsx("span",{className:"series-title",children:o.series}),e.jsxs("span",{className:"series-instance",children:["(",o.instance,")"]}),e.jsxs("span",{className:"series-count",children:["(",x," episodes)"]}),o.qualityProfileName?e.jsxs("span",{className:"series-quality",children:["• ",o.qualityProfileName]}):null]}),e.jsx("div",{className:"series-content",children:o.subRows.map(T=>e.jsxs("details",{className:"season-details",children:[e.jsxs("summary",{className:"season-summary",children:[e.jsxs("span",{className:"season-title",children:["Season ",T.seasonNumber]}),e.jsxs("span",{className:"season-count",children:["(",T.subRows.length," episodes)"]})]}),e.jsx("div",{className:"season-content",children:e.jsx("div",{className:"episodes-table-wrapper",children:e.jsxs("table",{className:"episodes-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:T.subRows.map(y=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Episode",children:y.episode}),e.jsx("td",{"data-label":"Title",children:y.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${y.monitored?"available":"missing"}`,children:y.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${y.hasFile?"available":"missing"}`,children:y.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:y.airDate||"—"}),e.jsx("td",{"data-label":"Reason",children:y.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:y.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${y.__instance}-${y.series}-${y.season}-${y.episode}`))})]})})})]},`${o.instance}-${o.series}-${T.seasonNumber}`))})]},`${o.instance}-${o.series}`)})}):!c&&m.total===0&&u>0?e.jsxs("div",{className:"hint",children:[e.jsx("p",{children:"No episodes found in the database."}),e.jsx("p",{children:"The backend may still be initializing and syncing data from your Sonarr instances. Please check the logs or wait a few moments and refresh."})]}):re.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:K.getFlatHeaders().map(o=>e.jsxs("th",{className:o.column.getCanSort()?"sortable":"",onClick:o.column.getToggleSortingHandler(),children:[o.isPlaceholder?null:we(o.column.columnDef.header,o.getContext()),o.column.getCanSort()&&e.jsx("span",{className:"sort-arrow",children:{asc:"▲",desc:"▼"}[o.column.getIsSorted()]??null})]},o.id))})}),e.jsx("tbody",{children:K.getRowModel().rows.map(o=>{const x=o.original,T=`${x.__instance}-${x.series}-${x.season}-${x.episode}`;return e.jsx("tr",{children:o.getVisibleCells().map(y=>e.jsx("td",{"data-label":y.column.columnDef.header,children:we(y.column.columnDef.cell,y.getContext())},y.id))},T)})})]})}):e.jsx("div",{className:"hint",children:"No series found."}),re.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",ne+1," of ",q," (",B," items · page size ",H,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>j(Math.max(0,ne-1)),disabled:ne===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>j(Math.min(q-1,ne+1)),disabled:ne>=q-1||c,children:"Next"})]})]})]})}function $s({loading:c,counts:l,series:d,page:f,pageSize:j,totalPages:C,totalItems:w,onlyMissing:b,reasonFilter:m,onPageChange:u,onRestart:i,lastUpdated:D,groupSonarr:W,instances:$,selection:S}){const[J,ce]=s.useState(0),re=50,te=s.useMemo(()=>{const r=[];for(const N of d){const R=N.series?.title||"",M=N.series?.qualityProfileId??null,L=N.series?.qualityProfileName??null;Object.entries(N.seasons??{}).forEach(([Z,ue])=>{(ue.episodes??[]).forEach(le=>{r.push({__instance:"Instance",series:R,season:Z,episode:le.episodeNumber??"",title:le.title??"",monitored:!!le.monitored,hasFile:!!le.hasFile,airDate:le.airDateUtc??"",reason:le.reason??null,qualityProfileId:M,qualityProfileName:L})})})}return r},[d]),g=s.useMemo(()=>{let r=te;if(b&&(r=r.filter(N=>!N.hasFile)),m!=="all"){console.log(`[Sonarr Instance Filter] Applying reason filter: "${m}"`);const N=r.length;m==="Not being searched"?r=r.filter(R=>R.reason==="Not being searched"||!R.reason):r=r.filter(R=>R.reason===m),console.log(`[Sonarr Instance Filter] Filtered from ${N} to ${r.length} episodes for reason "${m}"`),r.length<10&&console.log("[Sonarr Instance Filter] Sample filtered rows:",r.slice(0,5).map(R=>({series:R.series,episode:R.episode,reason:R.reason})))}return r},[te,b,m]);s.useEffect(()=>{const r=setTimeout(()=>ce(0),0);return()=>clearTimeout(r)},[b,m]);const h=s.useMemo(()=>{const r=new Map;return g.forEach(R=>{const M=R.series;r.has(M)||r.set(M,new Map);const L=r.get(M),Z=String(R.season);L.has(Z)||L.set(Z,[]),L.get(Z).push(R)}),Array.from(r.entries()).map(([R,M])=>{const L=Array.from(M.values())[0]?.[0];return{series:R,qualityProfileId:L?.qualityProfileId,qualityProfileName:L?.qualityProfileName,subRows:Array.from(M.entries()).map(([Z,ue])=>({seasonNumber:Z,isSeason:!0,subRows:ue.map(le=>({...le,isEpisode:!0}))}))}})},[g]),z=s.useMemo(()=>te.length,[te]),P=m!=="all"||b,K=g.length,H=Math.max(1,Math.ceil(g.length/re)),q=Math.min(J,Math.max(0,H-1)),ne=s.useMemo(()=>g.slice(q*re,(q+1)*re),[g,q]),B=50,[o,x]=s.useState(0),T=Math.max(1,Math.ceil(h.length/B)),y=Math.min(o,Math.max(0,T-1)),p=s.useMemo(()=>h.slice(y*B,(y+1)*B),[h,y]);return s.useEffect(()=>{const r=setTimeout(()=>x(0),0);return()=>clearTimeout(r)},[b,m]),e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[l?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",l.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",l.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",(l.missing??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total Episodes:"})," ",z.toLocaleString(void 0,{maximumFractionDigits:0}),P&&K<z&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",K.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",z.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading series information...",D?` (updated ${D})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:i,disabled:c,children:[e.jsx(_e,{src:Te}),"Restart"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading series…"]}):W?e.jsx("div",{className:"sonarr-hierarchical-view",children:p.map(r=>{let N=0;r.subRows.forEach(M=>{N+=M.subRows.length});const R=$.find(M=>M.category===S)?.name||S;return e.jsxs("details",{className:"series-details",children:[e.jsxs("summary",{className:"series-summary",children:[e.jsx("span",{className:"series-title",children:r.series}),e.jsxs("span",{className:"series-instance",children:["(",R,")"]}),e.jsxs("span",{className:"series-count",children:["(",N," episodes)"]}),r.qualityProfileName?e.jsxs("span",{className:"series-quality",children:["• ",r.qualityProfileName]}):null]}),e.jsx("div",{className:"series-content",children:r.subRows.map(M=>e.jsxs("details",{className:"season-details",children:[e.jsxs("summary",{className:"season-summary",children:[e.jsxs("span",{className:"season-title",children:["Season ",M.seasonNumber]}),e.jsxs("span",{className:"season-count",children:["(",M.subRows.length," episodes)"]})]}),e.jsx("div",{className:"season-content",children:e.jsx("div",{className:"episodes-table-wrapper",children:e.jsxs("table",{className:"episodes-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:M.subRows.map(L=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Episode",children:L.episode}),e.jsx("td",{"data-label":"Title",children:L.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${L.monitored?"available":"missing"}`,children:L.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${L.hasFile?"available":"missing"}`,children:L.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:L.airDate||"—"}),e.jsx("td",{"data-label":"Reason",children:L.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:L.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${L.series}-${L.season}-${L.episode}`))})]})})})]},`${r.series}-${M.seasonNumber}`))})]},`${r.series}`)})}):!c&&d.length>0&&g.length===0&&te.length===0?e.jsxs("div",{className:"hint",children:[e.jsx("p",{children:"No episodes found for these series."}),e.jsx("p",{children:"The backend may still be syncing episode data from Sonarr. Please check the logs or wait a few moments and refresh."})]}):!c&&d.length>0&&g.length===0&&te.length>0?e.jsx("div",{className:"hint",children:"No episodes match the current filter."}):!W&&g.length>0?e.jsxs("div",{className:"table-wrapper",children:[e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Series"}),e.jsx("th",{children:"Season"}),e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Quality Profile"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:ne.map((r,N)=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Series",children:r.series}),e.jsx("td",{"data-label":"Season",children:r.season}),e.jsx("td",{"data-label":"Episode",children:r.episode}),e.jsx("td",{"data-label":"Title",children:r.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${r.monitored?"available":"missing"}`,children:r.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${r.hasFile?"available":"missing"}`,children:r.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:r.airDate||"—"}),e.jsx("td",{"data-label":"Quality Profile",children:r.qualityProfileName||"—"}),e.jsx("td",{"data-label":"Reason",children:r.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:r.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${r.series}-${r.season}-${r.episode}-${N}`))})]}),H>1&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",q+1," of ",H," (",g.length.toLocaleString()," episodes · page size ",re,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>ce(Math.max(0,q-1)),disabled:q===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>ce(Math.min(H-1,q+1)),disabled:q>=H-1||c,children:"Next"})]})]})]}):e.jsx("div",{className:"hint",children:"No series found."}),W&&h.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",y+1," of ",T," (",h.length.toLocaleString()," series · page size ",B,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>x(Math.max(0,y-1)),disabled:y===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>x(Math.min(T-1,y+1)),disabled:y>=T-1||c,children:"Next"})]})]})]})}const ss=50,ms=500;function Ls({loading:c,rows:l,trackRows:d,page:f,onPageChange:j,onRefresh:C,lastUpdated:w,summary:b,instanceCount:m,groupLidarr:u,isAggFiltered:i=!1}){const D=s.useRef([]),W=s.useRef([]),$=s.useRef(new Map),S=s.useMemo(()=>{if(l===D.current)return W.current;const g=new Map;l.forEach(P=>{const K=P.__instance,H=P.album?.artistName||"Unknown Artist";g.has(K)||g.set(K,new Map);const q=g.get(K);q.has(H)||q.set(H,[]),q.get(H).push(P)});const h=[],z=new Map;return g.forEach((P,K)=>{P.forEach((H,q)=>{const ne=`${K}-${q}`,B=new Set;H.forEach(p=>{const N=`${p.album?.title}`;B.add(N)});const o=$.current.get(ne);if(o&&o.albumKeys.size===B.size){let p=!0;for(const r of B)if(!o.albumKeys.has(r)){p=!1;break}if(p){h.push(o),z.set(ne,o);return}}const T=H[0]?.album,y={instance:K,artist:q,qualityProfileId:T?.qualityProfileId??null,qualityProfileName:T?.qualityProfileName??null,albums:H,albumKeys:B};h.push(y),z.set(ne,y)})}),D.current=l,W.current=h,$.current=z,h},[l]),J=s.useMemo(()=>S.slice(f*50,(f+1)*50),[S,f]),ce=s.useMemo(()=>{const h=f*50,z=h+50;return d.slice(h,z)},[d,f]),re=s.useMemo(()=>[...m>1?[{accessorKey:"__instance",header:"Instance",size:120}]:[],{accessorKey:"artistName",header:"Artist",size:150},{accessorKey:"albumTitle",header:"Album",size:150},{accessorKey:"trackNumber",header:"#",size:50},{accessorKey:"title",header:"Track"},{accessorKey:"duration",header:"Duration",cell:g=>{const h=g.getValue();return h?`${Math.floor(h/60)}:${String(h%60).padStart(2,"0")}`:e.jsx("span",{className:"hint",children:"—"})},size:80},{accessorKey:"monitored",header:"Monitored",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:g=>g.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:g=>{const h=g.getValue();return h?e.jsx("span",{className:"table-badge table-badge-reason",children:h}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[m]),te=ke({data:ce,columns:re,getCoreRowModel:Ie()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated albums across all instances"," ",w?`(updated ${w})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",b.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",b.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",b.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",b.total.toLocaleString(void 0,{maximumFractionDigits:0}),i&&(u?l.length:d.length)<b.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",(u?l.length:d.length).toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",b.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:C,disabled:c,children:[e.jsx(_e,{src:Te}),"Refresh"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Lidarr library…"]}):u?e.jsx("div",{className:"lidarr-hierarchical-view",children:J.map(g=>e.jsxs("details",{className:"artist-details",children:[e.jsxs("summary",{className:"artist-summary",children:[e.jsx("span",{className:"artist-title",children:g.artist}),e.jsxs("span",{className:"artist-instance",children:["(",g.instance,")"]}),e.jsxs("span",{className:"artist-count",children:["(",g.albums.length," albums)"]}),g.qualityProfileName?e.jsxs("span",{className:"artist-quality",children:["• ",g.qualityProfileName]}):null]}),e.jsx("div",{className:"artist-content",children:g.albums.map(h=>{const z=h.album,P=z?.title||"Unknown Album",K=z?.id||0,H=z?.artistName||"",q=z?.releaseDate,ne=z?.monitored,B=z?.hasFile,o=z?.reason,x=h.tracks||[],T=h.totals;return e.jsxs("details",{className:"album-details",children:[e.jsxs("summary",{className:"album-summary",children:[e.jsx("span",{className:"album-title",children:P}),q&&e.jsx("span",{className:"album-date",children:new Date(q).toLocaleDateString()}),x&&x.length>0&&e.jsxs("span",{className:"album-track-count",children:["(",T.available||0,"/",T.monitored||x.length," tracks)"]}),e.jsx("span",{className:`album-status ${B?"has-file":"missing"}`,children:B?"✓":"✗"})]}),e.jsx("div",{className:"album-content",children:x&&x.length>0?e.jsx("div",{className:"tracks-table-wrapper",children:e.jsxs("table",{className:"tracks-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"#"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Duration"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:x.map(y=>e.jsxs("tr",{className:y.hasFile?"track-available":"track-missing",children:[e.jsx("td",{"data-label":"#",children:y.trackNumber}),e.jsx("td",{"data-label":"Title",children:y.title}),e.jsx("td",{"data-label":"Duration",children:y.duration?`${Math.floor(y.duration/60)}:${String(y.duration%60).padStart(2,"0")}`:"—"}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${y.hasFile?"available":"missing"}`,children:y.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Reason",children:o?e.jsx("span",{className:"table-badge table-badge-reason",children:o}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${K}-${y.id}`))})]})}):e.jsxs("div",{className:"album-info",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Monitored:"})," ",ne?"Yes":"No"," | ",e.jsx("strong",{children:"Has File:"})," ",B?"Yes":"No"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Reason:"})," ",o?e.jsx("span",{className:"table-badge table-badge-reason",children:o}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})]})]})})]},`${h.__instance}-${H}-${P}`)})})]},`${g.instance}-${g.artist}`))}):d.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:te.getHeaderGroups().map(g=>e.jsx("tr",{children:g.headers.map(h=>e.jsx("th",{children:h.isPlaceholder?null:we(h.column.columnDef.header,h.getContext())},h.id))},g.id))}),e.jsx("tbody",{children:te.getRowModel().rows.map(g=>{const h=g.original,z=`${h.__instance}-${h.artistName}-${h.albumTitle}-${h.trackNumber}`;return e.jsx("tr",{children:g.getVisibleCells().map(P=>e.jsx("td",{"data-label":String(P.column.columnDef.header),children:we(P.column.columnDef.cell,P.getContext())},P.id))},z)})})]})}):e.jsx("div",{className:"hint",children:"No tracks found."}),(u?J.length>0:ce.length>0)&&e.jsxs("div",{className:"pagination",children:[e.jsx("div",{children:u?e.jsxs(e.Fragment,{children:["Page ",f+1," of ",Math.ceil(S.length/50)," (",S.length," artists · page size 50)"]}):e.jsxs(e.Fragment,{children:["Page ",f+1," of ",Math.ceil(d.length/50)," (",d.length.toLocaleString()," tracks · page size 50)"]})}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>j(Math.max(0,f-1)),disabled:f===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>j(Math.min(Math.ceil(u?S.length/50:d.length/50)-1,f+1)),disabled:f>=Math.ceil(u?S.length/50:d.length/50)-1||c,children:"Next"})]})]})]})}function ks({loading:c,data:l,allAlbums:d,onlyMissing:f,reasonFilter:j,onRestart:C,lastUpdated:w,groupLidarr:b,instances:m,selection:u}){const[i,D]=s.useState(0),W=50,$=s.useMemo(()=>{let p=d;return f&&(p=p.filter(r=>!r.album?.hasFile)),p},[d,f]),S=s.useMemo(()=>j==="all"?$:j==="Not being searched"?$.filter(p=>{const r=p.album;return r?.reason==="Not being searched"||!r?.reason}):$.filter(p=>p.album?.reason===j),[$,j]),J=s.useMemo(()=>d.length,[d]),ce=j!=="all"||f,re=S.length;s.useEffect(()=>{D(0)},[f,j]);const te=s.useRef([]),g=s.useRef([]),h=s.useMemo(()=>{if(S===te.current)return g.current;const p=new Map;S.forEach(N=>{const M=N.album?.artistName||"Unknown Artist";p.has(M)||p.set(M,[]),p.get(M).push(N)});const r=Array.from(p.entries()).map(([N,R])=>{const L=R[0]?.album?.qualityProfileName??null;return{artist:N,albums:R,qualityProfileName:L}});return te.current=S,g.current=r,r},[S]),z=s.useMemo(()=>[{id:"title",header:"Album",cell:p=>p.row.original.album?.title||"Unknown Album"},{id:"artistName",header:"Artist",cell:p=>p.row.original.album?.artistName||"Unknown Artist",size:150},{id:"releaseDate",header:"Release Date",cell:p=>{const N=p.row.original.album?.releaseDate;return N?new Date(N).toLocaleDateString():e.jsx("span",{className:"hint",children:"—"})},size:120},{id:"monitored",header:"Monitored",cell:p=>{const N=p.row.original.album?.monitored;return e.jsx("span",{className:`track-status ${N?"available":"missing"}`,children:N?"✓":"✗"})},size:100},{id:"hasFile",header:"Has File",cell:p=>{const N=p.row.original.album?.hasFile;return e.jsx("span",{className:`track-status ${N?"available":"missing"}`,children:N?"✓":"✗"})},size:100},{id:"qualityProfileName",header:"Quality Profile",cell:p=>p.row.original.album?.qualityProfileName||"—",size:150},{id:"reason",header:"Reason",cell:p=>{const N=p.row.original.album?.reason;return N?e.jsx("span",{className:"table-badge table-badge-reason",children:N}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[]),P=Math.max(1,Math.ceil(S.length/W)),K=Math.min(i,Math.max(0,P-1)),H=s.useMemo(()=>S.slice(K*W,(K+1)*W),[S,K]),q=50,[ne,B]=s.useState(0),o=Math.max(1,Math.ceil(h.length/q)),x=Math.min(ne,Math.max(0,o-1)),T=s.useMemo(()=>h.slice(x*q,(x+1)*q),[h,x]);s.useEffect(()=>{B(0)},[f,j]);const y=ke({data:H,columns:z,getCoreRowModel:Ie(),getSortedRowModel:os()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[l?.counts?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",(l.counts.available??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",(l.counts.monitored??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",((l.counts.monitored??0)-(l.counts.available??0)).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",J.toLocaleString(void 0,{maximumFractionDigits:0}),ce&&re<J&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",re.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",J.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading album information...",w?` (updated ${w})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:C,disabled:c,children:[e.jsx(_e,{src:Te}),"Restart"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading…"]}):b?e.jsx("div",{className:"lidarr-hierarchical-view",children:T.map(p=>{const r=m.find(N=>N.category===u)?.name||u;return e.jsxs("details",{className:"artist-details",children:[e.jsxs("summary",{className:"artist-summary",children:[e.jsx("span",{className:"artist-title",children:p.artist}),e.jsxs("span",{className:"artist-instance",children:["(",r,")"]}),e.jsxs("span",{className:"artist-count",children:["(",p.albums.length," albums)"]}),p.qualityProfileName?e.jsxs("span",{className:"artist-quality",children:["• ",p.qualityProfileName]}):null]}),e.jsx("div",{className:"artist-content",children:p.albums.map(N=>{const R=N.album,M=R?.title||"Unknown Album",L=R?.id||0,Z=R?.artistName||"",ue=R?.releaseDate,le=R?.monitored,he=R?.hasFile,ee=R?.reason,oe=N.tracks||[],Me=N.totals;return e.jsxs("details",{className:"album-details",children:[e.jsxs("summary",{className:"album-summary",children:[e.jsx("span",{className:"album-title",children:M}),ue&&e.jsx("span",{className:"album-date",children:new Date(ue).toLocaleDateString()}),oe&&oe.length>0&&e.jsxs("span",{className:"album-track-count",children:["(",Me.available||0,"/",Me.monitored||oe.length," tracks)"]}),e.jsx("span",{className:`album-status ${he?"has-file":"missing"}`,children:he?"✓":"✗"})]}),e.jsx("div",{className:"album-content",children:oe&&oe.length>0?e.jsx("div",{className:"tracks-table-wrapper",children:e.jsxs("table",{className:"tracks-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"#"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Duration"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:oe.map(fe=>e.jsxs("tr",{className:fe.hasFile?"track-available":"track-missing",children:[e.jsx("td",{"data-label":"#",children:fe.trackNumber}),e.jsx("td",{"data-label":"Title",children:fe.title}),e.jsx("td",{"data-label":"Duration",children:fe.duration?`${Math.floor(fe.duration/60)}:${String(fe.duration%60).padStart(2,"0")}`:"—"}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${fe.hasFile?"available":"missing"}`,children:fe.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Reason",children:ee?e.jsx("span",{className:"table-badge table-badge-reason",children:ee}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${L}-${fe.id}`))})]})}):e.jsxs("div",{className:"album-info",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Monitored:"})," ",le?"Yes":"No"," | ",e.jsx("strong",{children:"Has File:"})," ",he?"Yes":"No"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Reason:"})," ",ee?e.jsx("span",{className:"table-badge table-badge-reason",children:ee}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})]})]})})]},`${Z}-${M}`)})})]},p.artist)})}):!b&&d.length?e.jsxs("div",{className:"table-wrapper",children:[e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:y.getHeaderGroups().map(p=>e.jsx("tr",{children:p.headers.map(r=>e.jsx("th",{children:r.isPlaceholder?null:we(r.column.columnDef.header,r.getContext())},r.id))},p.id))}),e.jsx("tbody",{children:y.getRowModel().rows.map(p=>{const N=p.original.album,R=N?.title||"Unknown",M=N?.artistName||"Unknown",L=`${R}-${M}`;return e.jsx("tr",{children:p.getVisibleCells().map(Z=>e.jsx("td",{"data-label":String(Z.column.columnDef.header),children:we(Z.column.columnDef.cell,Z.getContext())},Z.id))},L)})})]}),P>1&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",K+1," of ",P," (",S.length.toLocaleString()," albums · page size ",W,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>D(Math.max(0,K-1)),disabled:K===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>D(Math.min(P-1,K+1)),disabled:K>=P-1||c,children:"Next"})]})]})]}):e.jsx("div",{className:"hint",children:"No albums found."}),b&&h.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",x+1," of ",o," (",h.length.toLocaleString()," artists · page size ",q,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>B(Math.max(0,x-1)),disabled:x===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>B(Math.min(o-1,x+1)),disabled:x>=o-1||c,children:"Next"})]})]})]})}function Is({active:c}){const{push:l}=ts(),{value:d,setValue:f,register:j,clearHandler:C}=ns(),{liveArr:w,groupLidarr:b}=ls(),[m,u]=s.useState([]),[i,D]=s.useState(""),[W,$]=s.useState(null),[S,J]=s.useState(0),[ce,re]=s.useState(""),[te,g]=s.useState(!1),[h,z]=s.useState(null),[P,K]=s.useState({}),[H,q]=s.useState(ss),[ne,B]=s.useState(1),o=s.useRef(""),x=s.useRef({}),T=s.useRef(d),y=s.useRef(!1),p=s.useRef(i),r=Le({getKey:t=>{const a=t.album,n=a?.artistName||"",v=a?.title||"";return`${n}-${v}`},hashFields:["album","tracks","totals"]}),[N,R]=s.useState([]),[M,L]=s.useState([]),[Z,ue]=s.useState(!1),[le,he]=s.useState(0),[ee,oe]=s.useState(""),[Me,fe]=s.useState(null),ze=Le({getKey:t=>{const a=t.album,n=a?.artistName||"",v=a?.title||"";return`${t.__instance}-${n}-${v}`},hashFields:["__instance","album","tracks","totals"]}),G=Le({getKey:t=>`${t.__instance}-${t.artistName}-${t.albumTitle}-${t.trackNumber}`,hashFields:["__instance","artistName","albumTitle","trackNumber","title","hasFile","monitored","reason"]}),[Ce,Fe]=s.useState(!1),[se,$e]=s.useState("all"),[je,be]=s.useState({available:0,monitored:0,missing:0,total:0}),ve=s.useCallback(async()=>{try{const t=await is();t.ready===!1&&!y.current?(y.current=!0,l("Lidarr backend is still initialising. Check the logs if this persists.","info")):t.ready&&(y.current=!0);const a=(t.arr||[]).filter(n=>n.type==="lidarr");if(u(a),!a.length){D("aggregate"),$(null),R([]),be({available:0,monitored:0,missing:0,total:0});return}i===""?D(a.length===1?a[0].category:"aggregate"):i!=="aggregate"&&!a.some(n=>n.category===i)&&D(a[0].category)}catch(t){l(t instanceof Error?t.message:"Unable to load Lidarr instances","error")}},[l,i]),Ne=s.useCallback(async(t,a,n,v,V)=>{if(v.length)try{const _=[];for(const E of v){const F=await Ye(t,E,n,a),k=F.page??E;if(_.push({page:k,albums:F.albums??[]}),o.current!==V)return}if(o.current!==V)return;K(E=>{const F={...E};let k=!1;for(const{page:Q,albums:A}of _){const Y=r.syncData(A);Y.hasChanges&&(F[Q]=Y.data,k=!0)}return x.current=F,k?F:E})}catch(_){l(_ instanceof Error?_.message:`Failed to load additional pages for ${t}`,"error")}},[l]),ye=s.useCallback(async(t,a,n,v={})=>{const V=v.preloadAll!==!1;(v.showLoading??!0)&&g(!0);try{const E=`${t}::${n}`,F=o.current!==E;F&&(o.current=E,K(()=>(x.current={},{})));const k=await Ye(t,a,ss,n);$(k);const Q=k.page??a;J(Q),re(n);const A=k.page_size??ss,Y=k.total??(k.albums??[]).length,I=Math.max(1,Math.ceil((Y||0)/A));q(A),B(I);const ie=k.albums??[],de=F?{}:x.current,X=r.syncData(ie),U=X.hasChanges;if(F&&r.reset(),(F||U)&&(K(me=>{const ge={...F?{}:me,[Q]:X.data};return x.current=ge,ge}),z(new Date().toLocaleTimeString())),V){const me=[];for(let O=0;O<I;O+=1)O!==Q&&(de[O]||me.push(O));Ne(t,n,A,me,E)}}catch(E){l(E instanceof Error?E.message:`Failed to load ${t} albums`,"error")}finally{g(!1)}},[l,Ne]),Se=s.useCallback(async t=>{if(!m.length){R([]),be({available:0,monitored:0,missing:0,total:0});return}(t?.showLoading??!0)&&ue(!0);try{const n=[];let v=0,V=0;for(const I of m){let ie=0,de=!1;const X=I.name||I.category;for(;ie<100;){const U=await Ye(I.category,ie,ms,"");if(console.log("=== Lidarr API Response ==="),console.log("Instance:",I.category),console.log("Response:",U),console.log("Albums count:",U.albums?.length),U.albums&&U.albums.length>0&&(console.log("First album entry:",U.albums[0]),console.log("First album.album:",U.albums[0].album),console.log("First album.totals:",U.albums[0].totals),console.log("First album.tracks:",U.albums[0].tracks)),console.log("========================="),!de){const O=U.counts;O&&(v+=O.available??0,V+=O.monitored??0),de=!0}const me=U.albums??[];if(me.forEach(O=>{n.push({...O,__instance:X})}),!me.length||me.length<ms)break;ie+=1}}const _=[];n.forEach(I=>{const ie=I.album,de=ie?.artistName||"Unknown Artist",X=ie?.title||"Unknown Album",U=ie?.reason,me=ie?.qualityProfileId,O=ie?.qualityProfileName,ge=I.tracks||[];ge&&ge.length>0&&ge.forEach(xe=>{_.push({__instance:I.__instance,artistName:de,albumTitle:X,trackNumber:xe.trackNumber||0,title:xe.title||"Unknown Track",duration:xe.duration,hasFile:xe.hasFile||!1,monitored:xe.monitored||!1,reason:U,qualityProfileId:me,qualityProfileName:O})})});const E=ze.syncData(n),F=E.hasChanges,k=G.syncData(_),Q=k.hasChanges;F&&R(E.data),Q&&L(k.data);const A=b?{available:v,monitored:V,missing:n.length-v,total:n.length}:{available:_.filter(I=>I.hasFile).length,monitored:_.filter(I=>I.monitored).length,missing:_.filter(I=>!I.hasFile).length,total:_.length},Y=je.available!==A.available||je.monitored!==A.monitored||je.missing!==A.missing||je.total!==A.total;Y&&be(A),ee!==d&&(he(0),oe(d)),(F||Y)&&fe(new Date().toLocaleTimeString())}catch(n){R([]),be({available:0,monitored:0,missing:0,total:0}),l(n instanceof Error?n.message:"Failed to load aggregated Lidarr data","error")}finally{ue(!1)}},[m,d,l,ee,b]);s.useEffect(()=>{c&&ve()},[c,ve]),s.useEffect(()=>{if(!c||!i||i==="aggregate")return;const t=p.current!==i;t&&(x.current={},K({}),B(1),J(0),p.current=i);const a=T.current;ye(i,t?0:S,a,{preloadAll:!0,showLoading:!0})},[c,i,ye,S]),s.useEffect(()=>{c&&i==="aggregate"&&Se()},[c,i,Se]),Ee(()=>{i==="aggregate"&&w&&Se({showLoading:!1})},i==="aggregate"&&w?1e3:null),s.useEffect(()=>{if(!c)return;const t=a=>{i==="aggregate"?(oe(a),he(0)):i&&(J(0),ye(i,0,a,{preloadAll:!0,showLoading:!0}))};return j(t),()=>{C(t)}},[c,i,j,C,ye]),Ee(()=>{if(i&&i!=="aggregate"){if(T.current?.trim?.()||"")return;ye(i,S,ce,{preloadAll:!1,showLoading:!1})}},c&&i&&i!=="aggregate"&&w?1e3:null),s.useEffect(()=>{T.current=d},[d]),s.useEffect(()=>{i==="aggregate"&&oe(d)},[i,d]);const Ke=s.useMemo(()=>{let t=N;if(ee){const a=ee.toLowerCase();t=t.filter(n=>{const v=n.album,V=(v?.title??"").toString().toLowerCase(),_=(v?.artistName??"").toString().toLowerCase(),E=(n.__instance??"").toLowerCase();return V.includes(a)||_.includes(a)||E.includes(a)})}return Ce&&(t=t.filter(a=>!a.album?.hasFile)),se!=="all"&&(se==="Not being searched"?t=t.filter(a=>{const n=a.album;return n?.reason==="Not being searched"||!n?.reason}):t=t.filter(a=>a.album?.reason===se)),t},[N,ee,Ce,se]),Ae=!!ee||se!=="all",qe=s.useMemo(()=>{let t=M;if(ee){const a=ee.toLowerCase();t=t.filter(n=>n.artistName.toLowerCase().includes(a)||n.albumTitle.toLowerCase().includes(a)||n.title.toLowerCase().includes(a)||n.__instance.toLowerCase().includes(a))}return Ce&&(t=t.filter(a=>!a.hasFile)),se!=="all"&&(se==="Not being searched"?t=t.filter(a=>a.reason==="Not being searched"||!a.reason):t=t.filter(a=>a.reason===se)),t},[M,ee,Ce,se]),Ue=s.useMemo(()=>{const t=Object.keys(P).map(Number).sort((n,v)=>n-v),a=[];return t.forEach(n=>{P[n]&&a.push(...P[n])}),a},[P]),Oe=s.useMemo(()=>P[S]??[],[P,S]),He=s.useCallback(async()=>{if(!(!i||i==="aggregate"))try{await rs(i),l(`Restarted ${i}`,"success")}catch(t){l(t instanceof Error?t.message:`Failed to restart ${i}`,"error")}},[i,l]),Ve=s.useCallback(t=>{const a=t.target.value||"aggregate";D(a),a!=="aggregate"&&f("")},[D,f]),De=i==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Lidarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[m.length>1&&e.jsx("button",{className:`btn ${De?"active":""}`,onClick:()=>D("aggregate"),children:"All Lidarr"}),m.map(t=>e.jsx("button",{className:`btn ghost ${i===t.category?"active":""}`,onClick:()=>{D(t.category),f("")},children:t.name||t.category},t.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:i||"aggregate",onChange:Ve,disabled:!m.length,children:[m.length>1&&e.jsx("option",{value:"aggregate",children:"All Lidarr"}),m.map(t=>e.jsx("option",{value:t.category,children:t.name||t.category},t.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter albums",value:d,onChange:t=>f(t.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:t=>{const a=t.target.value;Fe(a==="missing")},value:Ce?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Albums"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:t=>$e(t.target.value),value:se,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),De?e.jsx(Ls,{loading:Z,rows:Ke,trackRows:qe,page:le,onPageChange:he,onRefresh:()=>{Se({showLoading:!0})},lastUpdated:Me,summary:je,instanceCount:m.length,groupLidarr:b,isAggFiltered:Ae}):e.jsx(ks,{loading:te,data:W,page:S,totalPages:ne,pageSize:H,allAlbums:b?Oe:Ue,onlyMissing:Ce,reasonFilter:se,onPageChange:t=>{J(t),ye(i,t,ce,{preloadAll:!0})},onRestart:()=>{He()},lastUpdated:h,groupLidarr:b,instances:m,selection:i})]})]})})]})}function Ks({type:c,active:l}){return c==="radarr"?e.jsx(ws,{active:l}):c==="lidarr"?e.jsx(Is,{active:l}):e.jsx(As,{active:l})}export{Ks as ArrView};
1
+ import{u as ns,i as is,k as ls,l as rs,m as Ge,n as os,j as e,I as Ie,R as Ee,o as Ye,p as Je}from"./app.js";import{r as s,u as Oe,f as we,g as cs,a as Qe,b as Ns,c as vs}from"./table.js";import{S as ys}from"./StableTable.js";import{u as $e}from"./useInterval.js";import"./vendor.js";function ds(c,n){const[d,b]=s.useState(c);return s.useEffect(()=>{const S=setTimeout(()=>{b(c)},n);return()=>{clearTimeout(S)}},[c,n]),d}function Ss(c){let n=2166136261;for(let d=0;d<c.length;d++)n^=c.charCodeAt(d),n+=(n<<1)+(n<<4)+(n<<7)+(n<<8)+(n<<24);return(n>>>0).toString(36)}function ts(c,n){const d=n.map(b=>{const S=c[b];return S==null?"":typeof S=="boolean"?S?"1":"0":typeof S=="object"?JSON.stringify(S):String(S)});return Ss(d.join("|"))}function Rs(c,n,d,b){const S=[],I=[],$=[],x=new Set;for(const i of n){const w=d(i),V=ts(i,b);x.add(w);const A=c.byId.get(w),y=c.byHash.get(w);A?y!==V&&I.push(i):S.push(i)}for(const i of c.allIds)x.has(i)||$.push(i);const f=n.length-S.length-I.length,u=S.length>0||I.length>0||$.length>0;return{added:S,updated:I,removed:$,unchanged:f,hasChanges:u}}function Fs(c,n,d,b){if(!n.hasChanges)return c;const S=new Map(c.byId),I=new Map(c.byHash),$=[...c.allIds];for(const x of n.added){const f=d(x),u=ts(x,b);S.set(f,x),I.set(f,u),$.push(f)}for(const x of n.updated){const f=d(x),u=ts(x,b);S.set(f,x),I.set(f,u)}for(const x of n.removed){S.delete(x),I.delete(x);const f=$.indexOf(x);f!==-1&&$.splice(f,1)}return{byId:S,byHash:I,allIds:$,lastUpdate:Date.now()}}function Xe(c){return c.allIds.map(n=>c.byId.get(n)).filter(Boolean)}function hs(){return{byId:new Map,byHash:new Map,allIds:[],lastUpdate:0}}function ke(c){const{getKey:n,hashFields:d}=c,b=s.useRef(hs()),[S,I]=s.useState(0),$=s.useCallback(u=>{const i=Rs(b.current,u,n,d);if(!i.hasChanges)return{data:Xe(b.current),hasChanges:!1,changes:null,lastUpdate:b.current.lastUpdate};const w=Fs(b.current,i,n,d);return b.current=w,I(w.lastUpdate),{data:Xe(w),hasChanges:!0,changes:i,lastUpdate:w.lastUpdate}},[n,d]),x=s.useCallback(()=>Xe(b.current),[]),f=s.useCallback(()=>{b.current=hs(),I(0)},[]);return{syncData:$,getData:x,reset:f,lastUpdate:S}}const es=50,Ve=50,ms=500,Cs=s.memo(function({loading:n,rows:d,total:b,page:S,totalPages:I,onPageChange:$,onRefresh:x,lastUpdated:f,summary:u,instanceCount:i,isAggFiltered:w=!1}){const V=s.useMemo(()=>[...i>1?[{accessorKey:"__instance",header:"Instance",size:150}]:[],{accessorKey:"title",header:"Title",cell:A=>A.getValue()},{accessorKey:"year",header:"Year",size:80},{accessorKey:"monitored",header:"Monitored",cell:A=>{const y=A.getValue();return e.jsx("span",{className:`track-status ${y?"available":"missing"}`,children:y?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:A=>{const y=A.getValue();return e.jsx("span",{className:`track-status ${y?"available":"missing"}`,children:y?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:A=>A.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:A=>{const y=A.getValue();return y?e.jsx("span",{className:"table-badge table-badge-reason",children:y}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[i]);return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated movies across all instances"," ",f?`(updated ${f})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",u.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",u.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",u.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",u.total.toLocaleString(void 0,{maximumFractionDigits:0}),w&&b<u.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",b.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",u.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:x,disabled:n,children:[e.jsx(Ie,{src:Ee}),"Refresh"]})]}),n?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Radarr library…"]}):b?e.jsx(ys,{data:d,columns:V,getRowKey:A=>`${A.__instance}-${A.title}-${A.year}`}):e.jsx("div",{className:"hint",children:"No movies found."}),b>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",S+1," of ",I," (",b.toLocaleString()," items · page size"," ",Ve,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>$(Math.max(0,S-1)),disabled:S===0||n,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>$(Math.min(I-1,S+1)),disabled:S>=I-1||n,children:"Next"})]})]})]})}),Ms=s.memo(function({loading:n,data:d,page:b,totalPages:S,pageSize:I,allMovies:$,onlyMissing:x,reasonFilter:f,onPageChange:u,onRestart:i,lastUpdated:w}){const V=s.useMemo(()=>{let g=$;return x&&(g=g.filter(h=>!h.hasFile)),g},[$,x]),A=s.useMemo(()=>f==="all"?V:f==="Not being searched"?V.filter(g=>g.reason==="Not being searched"||!g.reason):V.filter(g=>g.reason===f),[V,f]),y=s.useMemo(()=>$.length,[$]),B=f!=="all"||x,le=A.length,ne=s.useMemo(()=>[{accessorKey:"title",header:"Title",cell:g=>g.getValue()},{accessorKey:"year",header:"Year",size:80},{accessorKey:"monitored",header:"Monitored",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:g=>g.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:g=>{const h=g.getValue();return h?e.jsx("span",{className:"table-badge table-badge-reason",children:h}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[]),X=Oe({data:A.slice(b*I,b*I+I),columns:ne,getCoreRowModel:Qe(),getSortedRowModel:cs()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[d?.counts?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",(d.counts.available??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",(d.counts.monitored??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",((d.counts.monitored??0)-(d.counts.available??0)).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",y.toLocaleString(void 0,{maximumFractionDigits:0}),B&&le<y&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",le.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",y.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading movie information...",w?` (updated ${w})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:i,disabled:n,children:[e.jsx(Ie,{src:Ee}),"Restart"]})]}),n?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading…"]}):$.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:X.getHeaderGroups().map(g=>e.jsx("tr",{children:g.headers.map(h=>e.jsx("th",{children:h.isPlaceholder?null:we(h.column.columnDef.header,h.getContext())},h.id))},g.id))}),e.jsx("tbody",{children:X.getRowModel().rows.map(g=>{const h=g.original,z=`${h.title}-${h.year}`;return e.jsx("tr",{children:g.getVisibleCells().map(C=>e.jsx("td",{"data-label":String(C.column.columnDef.header),children:we(C.column.columnDef.cell,C.getContext())},C.id))},z)})})]})}):e.jsx("div",{className:"hint",children:"No movies found."}),A.length>I&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",b+1," of ",S," (",A.length.toLocaleString()," items · page size"," ",I,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>u(Math.max(0,b-1)),disabled:b===0||n,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>u(Math.min(S-1,b+1)),disabled:b>=S-1||n,children:"Next"})]})]})]})});function Ps({active:c}){const{push:n}=ns(),{value:d,setValue:b,register:S,clearHandler:I}=is(),{liveArr:$}=ls(),[x,f]=s.useState([]),[u,i]=s.useState(""),[w,V]=s.useState(null),[A,y]=s.useState(0),[B,le]=s.useState(""),[ne,X]=s.useState(!1),[g,h]=s.useState(null),[z,C]=s.useState({}),[K,U]=s.useState(es),[q,ee]=s.useState(1),O=s.useRef(""),o=s.useRef({}),j=s.useRef(d),T=s.useRef(!1),v=ke({getKey:t=>`${t.title}-${t.year}`,hashFields:["title","year","hasFile","monitored","reason"]}),[N,r]=s.useState([]),[p,E]=s.useState(!1),[F,D]=s.useState(0),[J,oe]=s.useState(""),[ae,ce]=s.useState(null),re=ds(J,300),ue=ke({getKey:t=>`${t.__instance}-${t.title}-${t.year}`,hashFields:["__instance","title","year","hasFile","monitored","reason"]}),[Se,je]=s.useState({key:"__instance",direction:"asc"}),[be,_e]=s.useState(!1),[W,Ce]=s.useState("all"),[Me,se]=s.useState({available:0,monitored:0,missing:0,total:0}),Le=s.useCallback(async()=>{try{const t=await rs();t.ready===!1&&!T.current?(T.current=!0,n("Radarr backend is still initialising. Check the logs if this persists.","info")):t.ready&&(T.current=!0);const l=(t.arr||[]).filter(m=>m.type==="radarr");if(f(l),!l.length){i("aggregate"),V(null),r([]),se({available:0,monitored:0,missing:0,total:0});return}u===""?i(l.length===1?l[0].category:"aggregate"):u!=="aggregate"&&!l.some(m=>m.category===u)&&i(l[0].category)}catch(t){n(t instanceof Error?t.message:"Unable to load Radarr instances","error")}},[n,u]),pe=s.useCallback(async(t,l,m,L,P)=>{if(L.length)try{const k=[];for(const R of L){const M=await Ge(t,R,m,l),Q=M.page??R;if(k.push({page:Q,movies:M.movies??[]}),O.current!==P)return}if(O.current!==P)return;C(R=>{const M={...R};let Q=!1;for(const{page:_,movies:G}of k){const H=v.syncData(G);H.hasChanges&&(M[_]=H.data,Q=!0)}return o.current=M,Q?M:R})}catch(k){n(k instanceof Error?k.message:`Failed to load additional pages for ${t}`,"error")}},[n]),he=s.useCallback(async(t,l,m,L={})=>{const P=L.preloadAll!==!1;(L.showLoading??!0)&&X(!0);try{const R=`${t}::${m}`,M=O.current!==R;M&&(O.current=R,C(()=>(o.current={},{})));const Q=await Ge(t,l,es,m);V(Q);const _=Q.page??l;y(_),le(m);const G=Q.page_size??es,H=Q.total??(Q.movies??[]).length,ie=Math.max(1,Math.ceil((H||0)/G));U(G),ee(ie);const me=Q.movies??[],de=M?{}:o.current,Z=v.syncData(me),fe=Z.hasChanges;if(M&&v.reset(),(M||fe)&&(C(te=>{const Ne={...M?{}:te,[_]:Z.data};return o.current=Ne,Ne}),h(new Date().toLocaleTimeString())),P){const te=[];for(let xe=0;xe<ie;xe+=1)xe!==_&&(de[xe]||te.push(xe));pe(t,m,G,te,R)}}catch(R){n(R instanceof Error?R.message:`Failed to load ${t} movies`,"error")}finally{X(!1)}},[n,pe]),Re=s.useCallback(async t=>{if(!x.length){r([]),se({available:0,monitored:0,missing:0,total:0});return}(t?.showLoading??!0)&&E(!0);try{const m=[];let L=0,P=0;for(const _ of x){let G=0,H=!1;const ie=_.name||_.category;for(;G<100;){const me=await Ge(_.category,G,ms,"");if(!H){const Z=me.counts;Z&&(L+=Z.available??0,P+=Z.monitored??0),H=!0}const de=me.movies??[];if(de.forEach(Z=>{m.push({...Z,__instance:ie})}),!de.length||de.length<ms)break;G+=1}}const k=ue.syncData(m),R=k.hasChanges;R&&r(k.data);const M={available:L,monitored:P,missing:m.length-L,total:m.length},Q=Me.available!==M.available||Me.monitored!==M.monitored||Me.missing!==M.missing||Me.total!==M.total;Q&&se(M),J!==d&&(D(0),oe(d)),(R||Q)&&ce(new Date().toLocaleTimeString())}catch(m){r([]),se({available:0,monitored:0,missing:0,total:0}),n(m instanceof Error?m.message:"Failed to load aggregated Radarr data","error")}finally{E(!1)}},[x,d,n,J]);s.useEffect(()=>{c&&Le()},[c,Le]),s.useEffect(()=>{if(!c||!u||u==="aggregate")return;o.current={},C({}),ee(1),y(0);const t=j.current;he(u,0,t,{preloadAll:!0,showLoading:!0})},[c,u,he]),s.useEffect(()=>{c&&u==="aggregate"&&Re()},[c,u,Re]),$e(()=>{u==="aggregate"&&$&&Re({showLoading:!1})},u==="aggregate"&&$?1e3:null),s.useEffect(()=>{if(!c)return;const t=l=>{u==="aggregate"?(oe(l),D(0)):u&&(y(0),he(u,0,l,{preloadAll:!0,showLoading:!0}))};return S(t),()=>{I(t)}},[c,u,S,I,he]),$e(()=>{if(u&&u!=="aggregate"){if(j.current?.trim?.()||"")return;he(u,A,B,{preloadAll:!1,showLoading:!1})}},c&&u&&u!=="aggregate"&&$?1e3:null),s.useEffect(()=>{j.current=d},[d]),s.useEffect(()=>{u==="aggregate"&&oe(d)},[u,d]);const ve=s.useMemo(()=>{const t=re?re.toLowerCase():"",l=!!t,m=W!=="all";return N.filter(L=>{if(l){const P=(L.title??"").toString().toLowerCase(),k=(L.__instance??"").toLowerCase();if(!P.includes(t)&&!k.includes(t))return!1}if(be&&L.hasFile)return!1;if(m){if(W==="Not being searched"){if(L.reason!=="Not being searched"&&L.reason)return!1}else if(L.reason!==W)return!1}return!0})},[N,re,be,W]),ye=!!re||W!=="all",Fe=s.useMemo(()=>{const t=[...ve],l=(m,L)=>{switch(L){case"__instance":return(m.__instance||"").toLowerCase();case"title":return(m.title||"").toLowerCase();case"year":return m.year??0;case"monitored":return m.monitored?1:0;case"hasFile":return m.hasFile?1:0;default:return""}};return t.sort((m,L)=>{const P=l(m,Se.key),k=l(L,Se.key);let R=0;return typeof P=="number"&&typeof k=="number"?R=P-k:typeof P=="string"&&typeof k=="string"?R=P.localeCompare(k):R=String(P).localeCompare(String(k)),Se.direction==="asc"?R:-R}),t},[ve,Se]),Te=Math.max(1,Math.ceil(Fe.length/Ve)),Ae=s.useMemo(()=>Fe.slice(F*Ve,F*Ve+Ve),[Fe,F]),ze=s.useMemo(()=>{const t=Object.keys(z).map(Number).sort((m,L)=>m-L),l=[];return t.forEach(m=>{z[m]&&l.push(...z[m])}),l},[z]),Ke=s.useCallback(async()=>{if(!(!u||u==="aggregate"))try{await os(u),n(`Restarted ${u}`,"success")}catch(t){n(t instanceof Error?t.message:`Failed to restart ${u}`,"error")}},[u,n]),qe=s.useCallback(()=>{Re({showLoading:!0})},[Re]),Ue=s.useCallback(t=>{je(l=>l.key===t?{key:t,direction:l.direction==="asc"?"desc":"asc"}:{key:t,direction:"asc"})},[]),He=s.useCallback(()=>{u&&u!=="aggregate"&&he(u,A,B,{preloadAll:!1,showLoading:!0})},[u,A,B,he]),De=s.useCallback(t=>{const l=t.target.value||"aggregate";i(l),l!=="aggregate"&&b("")},[i,b]),a=u==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Radarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[x.length>1&&e.jsx("button",{className:`btn ${a?"active":""}`,onClick:()=>i("aggregate"),children:"All Radarr"}),x.map(t=>e.jsx("button",{className:`btn ghost ${u===t.category?"active":""}`,onClick:()=>{i(t.category),b("")},children:t.name||t.category},t.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:u||"aggregate",onChange:De,disabled:!x.length,children:[x.length>1&&e.jsx("option",{value:"aggregate",children:"All Radarr"}),x.map(t=>e.jsx("option",{value:t.category,children:t.name||t.category},t.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter movies",value:d,onChange:t=>b(t.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:t=>{const l=t.target.value;_e(l==="missing")},value:be?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Movies"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:t=>Ce(t.target.value),value:W,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),a?e.jsx(Cs,{loading:p,rows:Ae,total:Fe.length,page:F,totalPages:Te,onPageChange:D,onRefresh:qe,lastUpdated:ae,sort:Se,onSort:Ue,summary:Me,instanceCount:x.length,isAggFiltered:ye}):e.jsx(Ms,{loading:ne,data:w,page:A,totalPages:q,pageSize:K,allMovies:ze,onlyMissing:be,reasonFilter:W,onPageChange:t=>{y(t),he(u,t,B,{preloadAll:!0})},onRefresh:He,onRestart:()=>{Ke()},lastUpdated:g})]})]})})]})}const ss=25,ws=50,fs=200;function As(c,n){if(!n)return c;const d=[];for(const b of c){const S=b.seasons??{},I={};for(const[$,x]of Object.entries(S)){const f=(x.episodes??[]).filter(u=>!u.hasFile);f.length&&(I[$]={...x,episodes:f})}Object.keys(I).length!==0&&d.push({...b,seasons:I})}return d}function We(c,n){return JSON.stringify(As(c,n))}function Ds({active:c}){const{push:n}=ns(),{value:d,setValue:b,register:S,clearHandler:I}=is(),{liveArr:$,groupSonarr:x}=ls(),[f,u]=s.useState([]),[i,w]=s.useState(""),[V,A]=s.useState(null),[y,B]=s.useState(0),[le,ne]=s.useState(""),[X,g]=s.useState(!1),[h,z]=s.useState(null),[C,K]=s.useState({}),U=s.useRef({}),q=s.useRef(null),ee=s.useRef(""),[O,o]=s.useState(ss),[j,T]=s.useState(1),[v,N]=s.useState(0),r=s.useRef(d),p=s.useRef(!1),E=s.useRef(i),[F,D]=s.useState([]),[J,oe]=s.useState(!1),[ae,ce]=s.useState(0),[re,ue]=s.useState(""),[Se,je]=s.useState(null),be=ds(re,300),_e=ke({getKey:a=>`${a.__instance}-${a.series}-${a.season}-${a.episode}`,hashFields:["__instance","series","season","episode","title","hasFile","monitored","airDate","reason","qualityProfileId","qualityProfileName"]}),[W,Ce]=s.useState(!1),Me=s.useRef(W),[se,Le]=s.useState("all"),[pe,he]=s.useState({available:0,monitored:0,missing:0,total:0}),Re=s.useCallback(async()=>{try{const a=await rs();a.ready===!1&&!p.current?(p.current=!0,n("Sonarr backend is still initialising. Check the logs if this persists.","info")):a.ready&&(p.current=!0);const t=(a.arr||[]).filter(l=>l.type==="sonarr");if(u(t),!t.length){w("aggregate"),A(null),D([]),he({available:0,monitored:0,missing:0,total:0});return}i===""?w(t.length===1?t[0].category:"aggregate"):i!=="aggregate"&&!t.some(l=>l.category===i)&&w(t[0].category)}catch(a){n(a instanceof Error?a.message:"Unable to load Sonarr instances","error")}},[n,i]),ve=s.useCallback(async(a,t,l,m={})=>{const{preloadAll:L=!0,showLoading:P=!0,missingOnly:k}=m,R=k??W;P&&g(!0);try{const M=`${a}::${l}::${R?"missing":"all"}`,Q=ee.current!==M;Q&&(ee.current=M,K(()=>(U.current={},{})),N(0),T(1));const _=await Ye(a,t,ss,l,{missingOnly:R}),G=_.page??t,H=_.page_size??ss,ie=_.total??(_.series??[]).length,me=Math.max(1,Math.ceil((ie||0)/H)),de=_.series??[],Z=Q?{}:U.current,fe={...Z,[G]:de},te=We(Z[G]??[],R),xe=We(de,R),Ne=Q||te!==xe;if(U.current=fe,Ne&&K(fe),A(Y=>{const ge=Y?.counts??null,Pe=_.counts??null;return!Y||Y.total!==_.total||Y.page!==_.page||Y.page_size!==_.page_size||(ge?.available??null)!==(Pe?.available??null)||(ge?.monitored??null)!==(Pe?.monitored??null)||(ge?.missing??null)!==(Pe?.missing??null)||Ne?(q.current=_,_):Y}),B(Y=>Y===G?Y:G),ne(Y=>Y===l?Y:l),o(Y=>Y===H?Y:H),T(Y=>Y===me?Y:me),N(Y=>Y===ie?Y:ie),Ne&&z(new Date().toLocaleTimeString()),L){const Y=[];for(let ge=0;ge<me;ge+=1)ge!==G&&(fe[ge]||Y.push(ge));for(const ge of Y)try{const Pe=await Ye(a,ge,H,l,{missingOnly:R});if(ee.current!==M)break;const Be=Pe.page??ge,Ze=Pe.series??[],gs=U.current,xs=We(gs[Be]??[],R),js=We(Ze,R);if(xs===js){U.current={...gs,[Be]:Ze};continue}K(ps=>{const us={...ps,[Be]:Ze};return U.current=us,us})}catch{break}}}catch(M){n(M instanceof Error?M.message:`Failed to load ${a} series`,"error")}finally{P&&g(!1)}},[n,W]),ye=s.useCallback(async a=>{if(!f.length){D([]),he({available:0,monitored:0,missing:0,total:0});return}(a?.showLoading??!0)&&oe(!0);try{const l=[];let m=0,L=0,P=0;for(const _ of f){let G=0,H=!1;const ie=_.name||_.category;for(;G<200;){const me=await Ye(_.category,G,fs,"",{missingOnly:W});if(!H){const Z=me.counts;Z&&(m+=Z.available??0,L+=Z.monitored??0,P+=Z.missing??0),H=!0}const de=me.series??[];if(de.forEach(Z=>{const fe=Z.series?.title||"",te=Z.series?.qualityProfileId??null,xe=Z.series?.qualityProfileName??null;Object.entries(Z.seasons??{}).forEach(([Ne,Y])=>{(Y.episodes??[]).forEach(ge=>{const Pe=ge.reason??null;l.push({__instance:ie,series:fe,season:Ne,episode:ge.episodeNumber??"",title:ge.title??"",monitored:!!ge.monitored,hasFile:!!ge.hasFile,airDate:ge.airDateUtc??"",reason:Pe,qualityProfileId:te,qualityProfileName:xe})})})}),!de.length||de.length<fs)break;G+=1}}const k=_e.syncData(l),R=k.hasChanges;R&&D(k.data);const M={available:m,monitored:L,missing:P,total:l.length},Q=pe.available!==M.available||pe.monitored!==M.monitored||pe.missing!==M.missing||pe.total!==M.total;Q&&he(M),re!==d&&(ce(0),ue(d)),(R||Q)&&je(new Date().toLocaleTimeString())}catch(l){D([]),he({available:0,monitored:0,missing:0,total:0}),n(l instanceof Error?l.message:"Failed to load aggregated Sonarr data","error")}finally{oe(!1)}},[f,d,n,W,re]);s.useEffect(()=>{c&&Re()},[c,Re]),s.useEffect(()=>{if(!c||!i||i==="aggregate")return;const a=E.current!==i,t=Me.current!==W;a&&(B(0),E.current=i),t&&(Me.current=W);const l=r.current;ve(i,a?0:y,l,{preloadAll:!0,showLoading:!0,missingOnly:W})},[c,i,W,ve,y]),s.useEffect(()=>{c&&i==="aggregate"&&ye()},[c,i,ye]),$e(()=>{i==="aggregate"&&$&&ye({showLoading:!1})},i==="aggregate"&&$?1e3:null),s.useEffect(()=>{if(!c)return;const a=t=>{i==="aggregate"?(ue(t),ce(0)):i&&(B(0),ve(i,0,t,{preloadAll:!0,showLoading:!0,missingOnly:W}))};return S(a),()=>I(a)},[c,i,S,I,ve,W]),$e(()=>{if(i&&i!=="aggregate"){if(r.current?.trim?.()||"")return;ve(i,y,le,{preloadAll:!1,showLoading:!1,missingOnly:W})}},c&&i&&i!=="aggregate"&&$?1e3:null),s.useEffect(()=>{r.current=d},[d]),s.useEffect(()=>{i==="aggregate"&&ue(d)},[i,d]);const Fe=s.useMemo(()=>{const a=be?be.toLowerCase():"",t=!!a,l=se!=="all";return F.filter(m=>{if(t){const L=m.series.toLowerCase(),P=m.title.toLowerCase(),k=m.__instance.toLowerCase();if(!L.includes(a)&&!P.includes(a)&&!k.includes(a))return!1}if(W&&m.hasFile)return!1;if(l){if(se==="Not being searched"){if(m.reason!=="Not being searched"&&m.reason)return!1}else if(m.reason!==se)return!1}return!0})},[F,be,W,se]),Te=!!be||W||se!=="all",Ae=Fe,ze=Math.max(1,Math.ceil(Ae.length/ws)),Ke=C[y]??[],qe=s.useMemo(()=>{const a=Object.keys(C).map(Number).sort((l,m)=>l-m),t=[];return a.forEach(l=>{C[l]&&t.push(...C[l])}),t},[C]),Ue=s.useCallback(async()=>{if(!(!i||i==="aggregate"))try{await os(i),n(`Restarted ${i}`,"success")}catch(a){n(a instanceof Error?a.message:`Failed to restart ${i}`,"error")}},[i,n]),He=s.useCallback(a=>{const t=a.target.value||"aggregate";w(t),t!=="aggregate"&&b("")},[w,b]),De=i==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Sonarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[f.length>1&&e.jsx("button",{className:`btn ${De?"active":""}`,onClick:()=>w("aggregate"),children:"All Sonarr"}),f.map(a=>e.jsx("button",{className:`btn ghost ${i===a.category?"active":""}`,onClick:()=>{w(a.category),b("")},children:a.name||a.category},a.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:i||"aggregate",onChange:He,disabled:!f.length,children:[f.length>1&&e.jsx("option",{value:"aggregate",children:"All Sonarr"}),f.map(a=>e.jsx("option",{value:a.category,children:a.name||a.category},a.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter series or episodes",value:d,onChange:a=>b(a.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:a=>{const l=a.target.value==="missing";Ce(l),i&&i!=="aggregate"&&ve(i,0,r.current||"",{preloadAll:!0,showLoading:!0,missingOnly:l})},value:W?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Episodes"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:a=>Le(a.target.value),value:se,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),De?e.jsx(Ls,{loading:J,rows:Ae,total:Ae.length,page:ae,totalPages:ze,onPageChange:ce,onRefresh:()=>{ye({showLoading:!0})},lastUpdated:Se,groupSonarr:x,summary:pe,instanceCount:f.length,isAggFiltered:Te}):e.jsx(ks,{loading:X,counts:V?.counts??null,series:x?Ke:qe,page:y,pageSize:O,totalPages:j,totalItems:v,onlyMissing:W,reasonFilter:se,onPageChange:a=>{B(a),ve(i,a,le,{preloadAll:!1,showLoading:!0,missingOnly:W})},onRestart:()=>{Ue()},lastUpdated:h,groupSonarr:x,instances:f,selection:i})]})]})})]})}function Ls({loading:c,rows:n,page:d,totalPages:b,onPageChange:S,onRefresh:I,lastUpdated:$,groupSonarr:x,summary:f,instanceCount:u,isAggFiltered:i=!1}){const w=s.useRef([]),V=s.useRef([]),A=s.useRef(new Map),y=s.useMemo(()=>{if(n===w.current)return V.current;const o=new Map;n.forEach(v=>{const N=v.__instance,r=v.series,p=String(v.season);o.has(N)||o.set(N,new Map);const E=o.get(N);E.has(r)||E.set(r,new Map);const F=E.get(r);F.has(p)||F.set(p,[]),F.get(p).push(v)});const j=[],T=new Map;return o.forEach((v,N)=>{v.forEach((r,p)=>{const E=`${N}-${p}`,F=new Set;r.forEach((ae,ce)=>{ae.forEach(re=>{const ue=`${ce}-${re.episode}`;F.add(ue)})});const D=A.current.get(E);if(D&&D.episodeKeys.size===F.size){let ae=!0;for(const ce of F)if(!D.episodeKeys.has(ce)){ae=!1;break}if(ae){j.push(D),T.set(E,D);return}}const J=Array.from(r.values())[0]?.[0],oe={instance:N,series:p,qualityProfileId:J?.qualityProfileId,qualityProfileName:J?.qualityProfileName,subRows:Array.from(r.entries()).map(([ae,ce])=>({seasonNumber:ae,isSeason:!0,subRows:ce.map(re=>({...re,isEpisode:!0}))})),episodeKeys:F};j.push(oe),T.set(E,oe)})}),w.current=n,V.current=j,A.current=T,j},[n]),B=s.useMemo(()=>y.slice(d*50,(d+1)*50),[y,d]),le=s.useMemo(()=>n.slice(d*50,(d+1)*50),[n,d]),ne=x?B:le,X=s.useMemo(()=>[{accessorKey:"title",header:"Title",cell:({row:o})=>{if(o.original.isEpisode)return o.original.title;if(o.original.isSeason)return`Season ${o.original.seasonNumber}`;const j=[o.original.series];return o.original.instance&&j.push(`(${o.original.instance})`),o.original.qualityProfileName&&j.push(`• ${o.original.qualityProfileName}`),j.join(" ")}},{accessorKey:"monitored",header:"Monitored",cell:({row:o})=>{const j=(o.original.isEpisode,o.original.monitored);return e.jsx("span",{className:`track-status ${j?"available":"missing"}`,children:j?"✓":"✗"})}},{accessorKey:"hasFile",header:"Has File",cell:({row:o})=>{if(o.original.isEpisode){const j=o.original.hasFile;return e.jsx("span",{className:`track-status ${j?"available":"missing"}`,children:j?"✓":"✗"})}return null}},{accessorKey:"airDate",header:"Air Date",cell:({row:o})=>o.original.isEpisode?o.original.airDate||"—":null}],[]),g=s.useMemo(()=>[...u>1?[{accessorKey:"__instance",header:"Instance"}]:[],{accessorKey:"series",header:"Series"},{accessorKey:"season",header:"Season"},{accessorKey:"episode",header:"Episode"},{accessorKey:"title",header:"Title"},{accessorKey:"monitored",header:"Monitored",cell:({getValue:o})=>{const j=o();return e.jsx("span",{className:`track-status ${j?"available":"missing"}`,children:j?"✓":"✗"})}},{accessorKey:"hasFile",header:"Has File",cell:({getValue:o})=>{const j=o();return e.jsx("span",{className:`track-status ${j?"available":"missing"}`,children:j?"✓":"✗"})}},{accessorKey:"airDate",header:"Air Date",cell:({getValue:o})=>o()||"—"},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:({getValue:o})=>o()||"—"},{accessorKey:"reason",header:"Reason",cell:({getValue:o})=>{const j=o();return j?e.jsx("span",{className:"table-badge table-badge-reason",children:j}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})}}],[u]),h=x?X:g,z=Oe({data:ne,columns:h,getCoreRowModel:Qe(),getExpandedRowModel:Ns()}),C=Oe({data:ne,columns:h,getCoreRowModel:Qe(),getSortedRowModel:cs(),getPaginationRowModel:vs(),state:{pagination:{pageIndex:d,pageSize:50}},manualPagination:!0,pageCount:b}),K=x?z:C,U=50,q=Math.ceil(x?y.length/U:n.length/U),ee=Math.min(d,Math.max(0,q-1)),O=x?`${y.length} series`:n.length.toLocaleString();return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated episodes across all instances"," ",$?`(updated ${$})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",f.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",f.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",f.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total Episodes:"})," ",f.total.toLocaleString(void 0,{maximumFractionDigits:0}),i&&n.length<f.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",n.length.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",f.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:I,disabled:c,children:[e.jsx(Ie,{src:Ee}),"Refresh"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Sonarr library…"]}):x?e.jsx("div",{className:"sonarr-hierarchical-view",children:B.map(o=>{let j=0;return o.subRows.forEach(T=>{j+=T.subRows.length}),e.jsxs("details",{className:"series-details",children:[e.jsxs("summary",{className:"series-summary",children:[e.jsx("span",{className:"series-title",children:o.series}),e.jsxs("span",{className:"series-instance",children:["(",o.instance,")"]}),e.jsxs("span",{className:"series-count",children:["(",j," episodes)"]}),o.qualityProfileName?e.jsxs("span",{className:"series-quality",children:["• ",o.qualityProfileName]}):null]}),e.jsx("div",{className:"series-content",children:o.subRows.map(T=>e.jsxs("details",{className:"season-details",children:[e.jsxs("summary",{className:"season-summary",children:[e.jsxs("span",{className:"season-title",children:["Season ",T.seasonNumber]}),e.jsxs("span",{className:"season-count",children:["(",T.subRows.length," episodes)"]})]}),e.jsx("div",{className:"season-content",children:e.jsx("div",{className:"episodes-table-wrapper",children:e.jsxs("table",{className:"episodes-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:T.subRows.map(v=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Episode",children:v.episode}),e.jsx("td",{"data-label":"Title",children:v.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${v.monitored?"available":"missing"}`,children:v.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${v.hasFile?"available":"missing"}`,children:v.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:v.airDate||"—"}),e.jsx("td",{"data-label":"Reason",children:v.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:v.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${v.__instance}-${v.series}-${v.season}-${v.episode}`))})]})})})]},`${o.instance}-${o.series}-${T.seasonNumber}`))})]},`${o.instance}-${o.series}`)})}):!c&&f.total===0&&u>0?e.jsxs("div",{className:"hint",children:[e.jsx("p",{children:"No episodes found in the database."}),e.jsx("p",{children:"The backend may still be initializing and syncing data from your Sonarr instances. Please check the logs or wait a few moments and refresh."})]}):ne.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:K.getFlatHeaders().map(o=>e.jsxs("th",{className:o.column.getCanSort()?"sortable":"",onClick:o.column.getToggleSortingHandler(),children:[o.isPlaceholder?null:we(o.column.columnDef.header,o.getContext()),o.column.getCanSort()&&e.jsx("span",{className:"sort-arrow",children:{asc:"▲",desc:"▼"}[o.column.getIsSorted()]??null})]},o.id))})}),e.jsx("tbody",{children:K.getRowModel().rows.map(o=>{const j=o.original,T=`${j.__instance}-${j.series}-${j.season}-${j.episode}`;return e.jsx("tr",{children:o.getVisibleCells().map(v=>e.jsx("td",{"data-label":v.column.columnDef.header,children:we(v.column.columnDef.cell,v.getContext())},v.id))},T)})})]})}):e.jsx("div",{className:"hint",children:"No series found."}),ne.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",ee+1," of ",q," (",O," items · page size ",U,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>S(Math.max(0,ee-1)),disabled:ee===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>S(Math.min(q-1,ee+1)),disabled:ee>=q-1||c,children:"Next"})]})]})]})}function ks({loading:c,counts:n,series:d,page:b,pageSize:S,totalPages:I,totalItems:$,onlyMissing:x,reasonFilter:f,onPageChange:u,onRestart:i,lastUpdated:w,groupSonarr:V,instances:A,selection:y}){const[B,le]=s.useState(0),ne=50,X=s.useMemo(()=>{const r=[];for(const p of d){const E=p.series?.title||"",F=p.series?.qualityProfileId??null,D=p.series?.qualityProfileName??null;Object.entries(p.seasons??{}).forEach(([J,oe])=>{(oe.episodes??[]).forEach(ae=>{r.push({__instance:"Instance",series:E,season:J,episode:ae.episodeNumber??"",title:ae.title??"",monitored:!!ae.monitored,hasFile:!!ae.hasFile,airDate:ae.airDateUtc??"",reason:ae.reason??null,qualityProfileId:F,qualityProfileName:D})})})}return r},[d]),g=s.useMemo(()=>{let r=X;return x&&(r=r.filter(p=>!p.hasFile)),f!=="all"&&(f==="Not being searched"?r=r.filter(p=>p.reason==="Not being searched"||!p.reason):r=r.filter(p=>p.reason===f)),r},[X,x,f]);s.useEffect(()=>{const r=setTimeout(()=>le(0),0);return()=>clearTimeout(r)},[x,f]);const h=s.useMemo(()=>{const r=new Map;return g.forEach(E=>{const F=E.series;r.has(F)||r.set(F,new Map);const D=r.get(F),J=String(E.season);D.has(J)||D.set(J,[]),D.get(J).push(E)}),Array.from(r.entries()).map(([E,F])=>{const D=Array.from(F.values())[0]?.[0];return{series:E,qualityProfileId:D?.qualityProfileId,qualityProfileName:D?.qualityProfileName,subRows:Array.from(F.entries()).map(([J,oe])=>({seasonNumber:J,isSeason:!0,subRows:oe.map(ae=>({...ae,isEpisode:!0}))}))}})},[g]),z=s.useMemo(()=>X.length,[X]),C=f!=="all"||x,K=g.length,U=Math.max(1,Math.ceil(g.length/ne)),q=Math.min(B,Math.max(0,U-1)),ee=s.useMemo(()=>g.slice(q*ne,(q+1)*ne),[g,q]),O=50,[o,j]=s.useState(0),T=Math.max(1,Math.ceil(h.length/O)),v=Math.min(o,Math.max(0,T-1)),N=s.useMemo(()=>h.slice(v*O,(v+1)*O),[h,v]);return s.useEffect(()=>{const r=setTimeout(()=>j(0),0);return()=>clearTimeout(r)},[x,f]),e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[n?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",n.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",n.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",(n.missing??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total Episodes:"})," ",z.toLocaleString(void 0,{maximumFractionDigits:0}),C&&K<z&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",K.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",z.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading series information...",w?` (updated ${w})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:i,disabled:c,children:[e.jsx(Ie,{src:Ee}),"Restart"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading series…"]}):V?e.jsx("div",{className:"sonarr-hierarchical-view",children:N.map(r=>{let p=0;r.subRows.forEach(F=>{p+=F.subRows.length});const E=A.find(F=>F.category===y)?.name||y;return e.jsxs("details",{className:"series-details",children:[e.jsxs("summary",{className:"series-summary",children:[e.jsx("span",{className:"series-title",children:r.series}),e.jsxs("span",{className:"series-instance",children:["(",E,")"]}),e.jsxs("span",{className:"series-count",children:["(",p," episodes)"]}),r.qualityProfileName?e.jsxs("span",{className:"series-quality",children:["• ",r.qualityProfileName]}):null]}),e.jsx("div",{className:"series-content",children:r.subRows.map(F=>e.jsxs("details",{className:"season-details",children:[e.jsxs("summary",{className:"season-summary",children:[e.jsxs("span",{className:"season-title",children:["Season ",F.seasonNumber]}),e.jsxs("span",{className:"season-count",children:["(",F.subRows.length," episodes)"]})]}),e.jsx("div",{className:"season-content",children:e.jsx("div",{className:"episodes-table-wrapper",children:e.jsxs("table",{className:"episodes-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:F.subRows.map(D=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Episode",children:D.episode}),e.jsx("td",{"data-label":"Title",children:D.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${D.monitored?"available":"missing"}`,children:D.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${D.hasFile?"available":"missing"}`,children:D.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:D.airDate||"—"}),e.jsx("td",{"data-label":"Reason",children:D.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:D.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${D.series}-${D.season}-${D.episode}`))})]})})})]},`${r.series}-${F.seasonNumber}`))})]},`${r.series}`)})}):!c&&d.length>0&&g.length===0&&X.length===0?e.jsxs("div",{className:"hint",children:[e.jsx("p",{children:"No episodes found for these series."}),e.jsx("p",{children:"The backend may still be syncing episode data from Sonarr. Please check the logs or wait a few moments and refresh."})]}):!c&&d.length>0&&g.length===0&&X.length>0?e.jsx("div",{className:"hint",children:"No episodes match the current filter."}):!V&&g.length>0?e.jsxs("div",{className:"table-wrapper",children:[e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Series"}),e.jsx("th",{children:"Season"}),e.jsx("th",{children:"Episode"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Monitored"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Air Date"}),e.jsx("th",{children:"Quality Profile"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:ee.map((r,p)=>e.jsxs("tr",{children:[e.jsx("td",{"data-label":"Series",children:r.series}),e.jsx("td",{"data-label":"Season",children:r.season}),e.jsx("td",{"data-label":"Episode",children:r.episode}),e.jsx("td",{"data-label":"Title",children:r.title}),e.jsx("td",{"data-label":"Monitored",children:e.jsx("span",{className:`track-status ${r.monitored?"available":"missing"}`,children:r.monitored?"✓":"✗"})}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${r.hasFile?"available":"missing"}`,children:r.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Air Date",children:r.airDate||"—"}),e.jsx("td",{"data-label":"Quality Profile",children:r.qualityProfileName||"—"}),e.jsx("td",{"data-label":"Reason",children:r.reason?e.jsx("span",{className:"table-badge table-badge-reason",children:r.reason}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${r.series}-${r.season}-${r.episode}-${p}`))})]}),U>1&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",q+1," of ",U," (",g.length.toLocaleString()," episodes · page size ",ne,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>le(Math.max(0,q-1)),disabled:q===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>le(Math.min(U-1,q+1)),disabled:q>=U-1||c,children:"Next"})]})]})]}):e.jsx("div",{className:"hint",children:"No series found."}),V&&h.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",v+1," of ",T," (",h.length.toLocaleString()," series · page size ",O,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>j(Math.max(0,v-1)),disabled:v===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>j(Math.min(T-1,v+1)),disabled:v>=T-1||c,children:"Next"})]})]})]})}const as=50,bs=500;function $s({loading:c,rows:n,trackRows:d,page:b,onPageChange:S,onRefresh:I,lastUpdated:$,summary:x,instanceCount:f,groupLidarr:u,isAggFiltered:i=!1}){const w=s.useRef([]),V=s.useRef([]),A=s.useRef(new Map),y=s.useMemo(()=>{if(n===w.current)return V.current;const g=new Map;n.forEach(C=>{const K=C.__instance,U=C.album?.artistName||"Unknown Artist";g.has(K)||g.set(K,new Map);const q=g.get(K);q.has(U)||q.set(U,[]),q.get(U).push(C)});const h=[],z=new Map;return g.forEach((C,K)=>{C.forEach((U,q)=>{const ee=`${K}-${q}`,O=new Set;U.forEach(N=>{const p=`${N.album?.title}`;O.add(p)});const o=A.current.get(ee);if(o&&o.albumKeys.size===O.size){let N=!0;for(const r of O)if(!o.albumKeys.has(r)){N=!1;break}if(N){h.push(o),z.set(ee,o);return}}const T=U[0]?.album,v={instance:K,artist:q,qualityProfileId:T?.qualityProfileId??null,qualityProfileName:T?.qualityProfileName??null,albums:U,albumKeys:O};h.push(v),z.set(ee,v)})}),w.current=n,V.current=h,A.current=z,h},[n]),B=s.useMemo(()=>y.slice(b*50,(b+1)*50),[y,b]),le=s.useMemo(()=>{const h=b*50,z=h+50;return d.slice(h,z)},[d,b]),ne=s.useMemo(()=>[...f>1?[{accessorKey:"__instance",header:"Instance",size:120}]:[],{accessorKey:"artistName",header:"Artist",size:150},{accessorKey:"albumTitle",header:"Album",size:150},{accessorKey:"trackNumber",header:"#",size:50},{accessorKey:"title",header:"Track"},{accessorKey:"duration",header:"Duration",cell:g=>{const h=g.getValue();return h?`${Math.floor(h/60)}:${String(h%60).padStart(2,"0")}`:e.jsx("span",{className:"hint",children:"—"})},size:80},{accessorKey:"monitored",header:"Monitored",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"hasFile",header:"Has File",cell:g=>{const h=g.getValue();return e.jsx("span",{className:`track-status ${h?"available":"missing"}`,children:h?"✓":"✗"})},size:100},{accessorKey:"qualityProfileName",header:"Quality Profile",cell:g=>g.getValue()||"—",size:150},{accessorKey:"reason",header:"Reason",cell:g=>{const h=g.getValue();return h?e.jsx("span",{className:"table-badge table-badge-reason",children:h}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[f]),X=Oe({data:le,columns:ne,getCoreRowModel:Qe()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:["Aggregated albums across all instances"," ",$?`(updated ${$})`:"",e.jsx("br",{}),e.jsx("strong",{children:"Available:"})," ",x.available.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",x.monitored.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",x.missing.toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",x.total.toLocaleString(void 0,{maximumFractionDigits:0}),i&&(u?n.length:d.length)<x.total&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",(u?n.length:d.length).toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",x.total.toLocaleString(void 0,{maximumFractionDigits:0})]})]}),e.jsxs("button",{className:"btn ghost",onClick:I,disabled:c,children:[e.jsx(Ie,{src:Ee}),"Refresh"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading Lidarr library…"]}):u?e.jsx("div",{className:"lidarr-hierarchical-view",children:B.map(g=>e.jsxs("details",{className:"artist-details",children:[e.jsxs("summary",{className:"artist-summary",children:[e.jsx("span",{className:"artist-title",children:g.artist}),e.jsxs("span",{className:"artist-instance",children:["(",g.instance,")"]}),e.jsxs("span",{className:"artist-count",children:["(",g.albums.length," albums)"]}),g.qualityProfileName?e.jsxs("span",{className:"artist-quality",children:["• ",g.qualityProfileName]}):null]}),e.jsx("div",{className:"artist-content",children:g.albums.map(h=>{const z=h.album,C=z?.title||"Unknown Album",K=z?.id||0,U=z?.artistName||"",q=z?.releaseDate,ee=z?.monitored,O=z?.hasFile,o=z?.reason,j=h.tracks||[],T=h.totals;return e.jsxs("details",{className:"album-details",children:[e.jsxs("summary",{className:"album-summary",children:[e.jsx("span",{className:"album-title",children:C}),q&&e.jsx("span",{className:"album-date",children:new Date(q).toLocaleDateString()}),j&&j.length>0&&e.jsxs("span",{className:"album-track-count",children:["(",T.available||0,"/",T.monitored||j.length," tracks)"]}),e.jsx("span",{className:`album-status ${O?"has-file":"missing"}`,children:O?"✓":"✗"})]}),e.jsx("div",{className:"album-content",children:j&&j.length>0?e.jsx("div",{className:"tracks-table-wrapper",children:e.jsxs("table",{className:"tracks-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"#"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Duration"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:j.map(v=>e.jsxs("tr",{className:v.hasFile?"track-available":"track-missing",children:[e.jsx("td",{"data-label":"#",children:v.trackNumber}),e.jsx("td",{"data-label":"Title",children:v.title}),e.jsx("td",{"data-label":"Duration",children:v.duration?`${Math.floor(v.duration/60)}:${String(v.duration%60).padStart(2,"0")}`:"—"}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${v.hasFile?"available":"missing"}`,children:v.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Reason",children:o?e.jsx("span",{className:"table-badge table-badge-reason",children:o}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${K}-${v.id}`))})]})}):e.jsxs("div",{className:"album-info",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Monitored:"})," ",ee?"Yes":"No"," | ",e.jsx("strong",{children:"Has File:"})," ",O?"Yes":"No"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Reason:"})," ",o?e.jsx("span",{className:"table-badge table-badge-reason",children:o}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})]})]})})]},`${h.__instance}-${U}-${C}`)})})]},`${g.instance}-${g.artist}`))}):d.length?e.jsx("div",{className:"table-wrapper",children:e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:X.getHeaderGroups().map(g=>e.jsx("tr",{children:g.headers.map(h=>e.jsx("th",{children:h.isPlaceholder?null:we(h.column.columnDef.header,h.getContext())},h.id))},g.id))}),e.jsx("tbody",{children:X.getRowModel().rows.map(g=>{const h=g.original,z=`${h.__instance}-${h.artistName}-${h.albumTitle}-${h.trackNumber}`;return e.jsx("tr",{children:g.getVisibleCells().map(C=>e.jsx("td",{"data-label":String(C.column.columnDef.header),children:we(C.column.columnDef.cell,C.getContext())},C.id))},z)})})]})}):e.jsx("div",{className:"hint",children:"No tracks found."}),(u?B.length>0:le.length>0)&&e.jsxs("div",{className:"pagination",children:[e.jsx("div",{children:u?e.jsxs(e.Fragment,{children:["Page ",b+1," of ",Math.ceil(y.length/50)," (",y.length," artists · page size 50)"]}):e.jsxs(e.Fragment,{children:["Page ",b+1," of ",Math.ceil(d.length/50)," (",d.length.toLocaleString()," tracks · page size 50)"]})}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>S(Math.max(0,b-1)),disabled:b===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>S(Math.min(Math.ceil(u?y.length/50:d.length/50)-1,b+1)),disabled:b>=Math.ceil(u?y.length/50:d.length/50)-1||c,children:"Next"})]})]})]})}function Is({loading:c,data:n,allAlbums:d,onlyMissing:b,reasonFilter:S,onRestart:I,lastUpdated:$,groupLidarr:x,instances:f,selection:u}){const[i,w]=s.useState(0),V=50,A=s.useMemo(()=>{let N=d;return b&&(N=N.filter(r=>!r.album?.hasFile)),N},[d,b]),y=s.useMemo(()=>S==="all"?A:S==="Not being searched"?A.filter(N=>{const r=N.album;return r?.reason==="Not being searched"||!r?.reason}):A.filter(N=>N.album?.reason===S),[A,S]),B=s.useMemo(()=>d.length,[d]),le=S!=="all"||b,ne=y.length;s.useEffect(()=>{w(0)},[b,S]);const X=s.useRef([]),g=s.useRef([]),h=s.useMemo(()=>{if(y===X.current)return g.current;const N=new Map;y.forEach(p=>{const F=p.album?.artistName||"Unknown Artist";N.has(F)||N.set(F,[]),N.get(F).push(p)});const r=Array.from(N.entries()).map(([p,E])=>{const D=E[0]?.album?.qualityProfileName??null;return{artist:p,albums:E,qualityProfileName:D}});return X.current=y,g.current=r,r},[y]),z=s.useMemo(()=>[{id:"title",header:"Album",cell:N=>N.row.original.album?.title||"Unknown Album"},{id:"artistName",header:"Artist",cell:N=>N.row.original.album?.artistName||"Unknown Artist",size:150},{id:"releaseDate",header:"Release Date",cell:N=>{const p=N.row.original.album?.releaseDate;return p?new Date(p).toLocaleDateString():e.jsx("span",{className:"hint",children:"—"})},size:120},{id:"monitored",header:"Monitored",cell:N=>{const p=N.row.original.album?.monitored;return e.jsx("span",{className:`track-status ${p?"available":"missing"}`,children:p?"✓":"✗"})},size:100},{id:"hasFile",header:"Has File",cell:N=>{const p=N.row.original.album?.hasFile;return e.jsx("span",{className:`track-status ${p?"available":"missing"}`,children:p?"✓":"✗"})},size:100},{id:"qualityProfileName",header:"Quality Profile",cell:N=>N.row.original.album?.qualityProfileName||"—",size:150},{id:"reason",header:"Reason",cell:N=>{const p=N.row.original.album?.reason;return p?e.jsx("span",{className:"table-badge table-badge-reason",children:p}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})},size:120}],[]),C=Math.max(1,Math.ceil(y.length/V)),K=Math.min(i,Math.max(0,C-1)),U=s.useMemo(()=>y.slice(K*V,(K+1)*V),[y,K]),q=50,[ee,O]=s.useState(0),o=Math.max(1,Math.ceil(h.length/q)),j=Math.min(ee,Math.max(0,o-1)),T=s.useMemo(()=>h.slice(j*q,(j+1)*q),[h,j]);s.useEffect(()=>{O(0)},[b,S]);const v=Oe({data:U,columns:z,getCoreRowModel:Qe(),getSortedRowModel:cs()});return e.jsxs("div",{className:"stack animate-fade-in",children:[e.jsxs("div",{className:"row",style:{justifyContent:"space-between"},children:[e.jsxs("div",{className:"hint",children:[n?.counts?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:"Available:"})," ",(n.counts.available??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Monitored:"})," ",(n.counts.monitored??0).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Missing:"})," ",((n.counts.monitored??0)-(n.counts.available??0)).toLocaleString(void 0,{maximumFractionDigits:0})," •"," ",e.jsx("strong",{children:"Total:"})," ",B.toLocaleString(void 0,{maximumFractionDigits:0}),le&&ne<B&&e.jsxs(e.Fragment,{children:[" ","• ",e.jsx("strong",{children:"Filtered:"})," ",ne.toLocaleString(void 0,{maximumFractionDigits:0})," of"," ",B.toLocaleString(void 0,{maximumFractionDigits:0})]})]}):"Loading album information...",$?` (updated ${$})`:""]}),e.jsxs("button",{className:"btn ghost",onClick:I,disabled:c,children:[e.jsx(Ie,{src:Ee}),"Restart"]})]}),c?e.jsxs("div",{className:"loading",children:[e.jsx("span",{className:"spinner"})," Loading…"]}):x?e.jsx("div",{className:"lidarr-hierarchical-view",children:T.map(N=>{const r=f.find(p=>p.category===u)?.name||u;return e.jsxs("details",{className:"artist-details",children:[e.jsxs("summary",{className:"artist-summary",children:[e.jsx("span",{className:"artist-title",children:N.artist}),e.jsxs("span",{className:"artist-instance",children:["(",r,")"]}),e.jsxs("span",{className:"artist-count",children:["(",N.albums.length," albums)"]}),N.qualityProfileName?e.jsxs("span",{className:"artist-quality",children:["• ",N.qualityProfileName]}):null]}),e.jsx("div",{className:"artist-content",children:N.albums.map(p=>{const E=p.album,F=E?.title||"Unknown Album",D=E?.id||0,J=E?.artistName||"",oe=E?.releaseDate,ae=E?.monitored,ce=E?.hasFile,re=E?.reason,ue=p.tracks||[],Se=p.totals;return e.jsxs("details",{className:"album-details",children:[e.jsxs("summary",{className:"album-summary",children:[e.jsx("span",{className:"album-title",children:F}),oe&&e.jsx("span",{className:"album-date",children:new Date(oe).toLocaleDateString()}),ue&&ue.length>0&&e.jsxs("span",{className:"album-track-count",children:["(",Se.available||0,"/",Se.monitored||ue.length," tracks)"]}),e.jsx("span",{className:`album-status ${ce?"has-file":"missing"}`,children:ce?"✓":"✗"})]}),e.jsx("div",{className:"album-content",children:ue&&ue.length>0?e.jsx("div",{className:"tracks-table-wrapper",children:e.jsxs("table",{className:"tracks-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"#"}),e.jsx("th",{children:"Title"}),e.jsx("th",{children:"Duration"}),e.jsx("th",{children:"Has File"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:ue.map(je=>e.jsxs("tr",{className:je.hasFile?"track-available":"track-missing",children:[e.jsx("td",{"data-label":"#",children:je.trackNumber}),e.jsx("td",{"data-label":"Title",children:je.title}),e.jsx("td",{"data-label":"Duration",children:je.duration?`${Math.floor(je.duration/60)}:${String(je.duration%60).padStart(2,"0")}`:"—"}),e.jsx("td",{"data-label":"Has File",children:e.jsx("span",{className:`track-status ${je.hasFile?"available":"missing"}`,children:je.hasFile?"✓":"✗"})}),e.jsx("td",{"data-label":"Reason",children:re?e.jsx("span",{className:"table-badge table-badge-reason",children:re}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})})]},`${D}-${je.id}`))})]})}):e.jsxs("div",{className:"album-info",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Monitored:"})," ",ae?"Yes":"No"," | ",e.jsx("strong",{children:"Has File:"})," ",ce?"Yes":"No"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Reason:"})," ",re?e.jsx("span",{className:"table-badge table-badge-reason",children:re}):e.jsx("span",{className:"table-badge table-badge-reason",children:"Not being searched"})]})]})})]},`${J}-${F}`)})})]},N.artist)})}):!x&&d.length?e.jsxs("div",{className:"table-wrapper",children:[e.jsxs("table",{className:"responsive-table",children:[e.jsx("thead",{children:v.getHeaderGroups().map(N=>e.jsx("tr",{children:N.headers.map(r=>e.jsx("th",{children:r.isPlaceholder?null:we(r.column.columnDef.header,r.getContext())},r.id))},N.id))}),e.jsx("tbody",{children:v.getRowModel().rows.map(N=>{const p=N.original.album,E=p?.title||"Unknown",F=p?.artistName||"Unknown",D=`${E}-${F}`;return e.jsx("tr",{children:N.getVisibleCells().map(J=>e.jsx("td",{"data-label":String(J.column.columnDef.header),children:we(J.column.columnDef.cell,J.getContext())},J.id))},D)})})]}),C>1&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",K+1," of ",C," (",y.length.toLocaleString()," albums · page size ",V,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>w(Math.max(0,K-1)),disabled:K===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>w(Math.min(C-1,K+1)),disabled:K>=C-1||c,children:"Next"})]})]})]}):e.jsx("div",{className:"hint",children:"No albums found."}),x&&h.length>0&&e.jsxs("div",{className:"pagination",children:[e.jsxs("div",{children:["Page ",j+1," of ",o," (",h.length.toLocaleString()," artists · page size ",q,")"]}),e.jsxs("div",{className:"inline",children:[e.jsx("button",{className:"btn",onClick:()=>O(Math.max(0,j-1)),disabled:j===0||c,children:"Prev"}),e.jsx("button",{className:"btn",onClick:()=>O(Math.min(o-1,j+1)),disabled:j>=o-1||c,children:"Next"})]})]})]})}function Es({active:c}){const{push:n}=ns(),{value:d,setValue:b,register:S,clearHandler:I}=is(),{liveArr:$,groupLidarr:x}=ls(),[f,u]=s.useState([]),[i,w]=s.useState(""),[V,A]=s.useState(null),[y,B]=s.useState(0),[le,ne]=s.useState(""),[X,g]=s.useState(!1),[h,z]=s.useState(null),[C,K]=s.useState({}),[U,q]=s.useState(as),[ee,O]=s.useState(1),o=s.useRef(""),j=s.useRef({}),T=s.useRef(d),v=s.useRef(!1),N=s.useRef(i),r=ke({getKey:a=>{const t=a.album,l=t?.artistName||"",m=t?.title||"";return`${l}-${m}`},hashFields:["album","tracks","totals"]}),[p,E]=s.useState([]),[F,D]=s.useState([]),[J,oe]=s.useState(!1),[ae,ce]=s.useState(0),[re,ue]=s.useState(""),[Se,je]=s.useState(null),be=ds(re,300),_e=ke({getKey:a=>{const t=a.album,l=t?.artistName||"",m=t?.title||"";return`${a.__instance}-${l}-${m}`},hashFields:["__instance","album","tracks","totals"]}),W=ke({getKey:a=>`${a.__instance}-${a.artistName}-${a.albumTitle}-${a.trackNumber}`,hashFields:["__instance","artistName","albumTitle","trackNumber","title","hasFile","monitored","reason"]}),[Ce,Me]=s.useState(!1),[se,Le]=s.useState("all"),[pe,he]=s.useState({available:0,monitored:0,missing:0,total:0}),Re=s.useCallback(async()=>{try{const a=await rs();a.ready===!1&&!v.current?(v.current=!0,n("Lidarr backend is still initialising. Check the logs if this persists.","info")):a.ready&&(v.current=!0);const t=(a.arr||[]).filter(l=>l.type==="lidarr");if(u(t),!t.length){w("aggregate"),A(null),E([]),he({available:0,monitored:0,missing:0,total:0});return}i===""?w(t.length===1?t[0].category:"aggregate"):i!=="aggregate"&&!t.some(l=>l.category===i)&&w(t[0].category)}catch(a){n(a instanceof Error?a.message:"Unable to load Lidarr instances","error")}},[n,i]),ve=s.useCallback(async(a,t,l,m,L)=>{if(m.length)try{const P=[];for(const k of m){const R=await Je(a,k,l,t),M=R.page??k;if(P.push({page:M,albums:R.albums??[]}),o.current!==L)return}if(o.current!==L)return;K(k=>{const R={...k};let M=!1;for(const{page:Q,albums:_}of P){const G=r.syncData(_);G.hasChanges&&(R[Q]=G.data,M=!0)}return j.current=R,M?R:k})}catch(P){n(P instanceof Error?P.message:`Failed to load additional pages for ${a}`,"error")}},[n]),ye=s.useCallback(async(a,t,l,m={})=>{const L=m.preloadAll!==!1;(m.showLoading??!0)&&g(!0);try{const k=`${a}::${l}`,R=o.current!==k;R&&(o.current=k,K(()=>(j.current={},{})));const M=await Je(a,t,as,l);A(M);const Q=M.page??t;B(Q),ne(l);const _=M.page_size??as,G=M.total??(M.albums??[]).length,H=Math.max(1,Math.ceil((G||0)/_));q(_),O(H);const ie=M.albums??[],me=R?{}:j.current,de=r.syncData(ie),Z=de.hasChanges;if(R&&r.reset(),(R||Z)&&(K(fe=>{const xe={...R?{}:fe,[Q]:de.data};return j.current=xe,xe}),z(new Date().toLocaleTimeString())),L){const fe=[];for(let te=0;te<H;te+=1)te!==Q&&(me[te]||fe.push(te));ve(a,l,_,fe,k)}}catch(k){n(k instanceof Error?k.message:`Failed to load ${a} albums`,"error")}finally{g(!1)}},[n,ve]),Fe=s.useCallback(async a=>{if(!f.length){E([]),he({available:0,monitored:0,missing:0,total:0});return}(a?.showLoading??!0)&&oe(!0);try{const l=[];let m=0,L=0;for(const H of f){let ie=0,me=!1;const de=H.name||H.category;for(;ie<100;){const Z=await Je(H.category,ie,bs,"");if(!me){const te=Z.counts;te&&(m+=te.available??0,L+=te.monitored??0),me=!0}const fe=Z.albums??[];if(fe.forEach(te=>{l.push({...te,__instance:de})}),!fe.length||fe.length<bs)break;ie+=1}}const P=[];l.forEach(H=>{const ie=H.album,me=ie?.artistName||"Unknown Artist",de=ie?.title||"Unknown Album",Z=ie?.reason,fe=ie?.qualityProfileId,te=ie?.qualityProfileName,xe=H.tracks||[];xe&&xe.length>0&&xe.forEach(Ne=>{P.push({__instance:H.__instance,artistName:me,albumTitle:de,trackNumber:Ne.trackNumber||0,title:Ne.title||"Unknown Track",duration:Ne.duration,hasFile:Ne.hasFile||!1,monitored:Ne.monitored||!1,reason:Z,qualityProfileId:fe,qualityProfileName:te})})});const k=_e.syncData(l),R=k.hasChanges,M=W.syncData(P),Q=M.hasChanges;R&&E(k.data),Q&&D(M.data);const _=x?{available:m,monitored:L,missing:l.length-m,total:l.length}:{available:P.filter(H=>H.hasFile).length,monitored:P.filter(H=>H.monitored).length,missing:P.filter(H=>!H.hasFile).length,total:P.length},G=pe.available!==_.available||pe.monitored!==_.monitored||pe.missing!==_.missing||pe.total!==_.total;G&&he(_),re!==d&&(ce(0),ue(d)),(R||G)&&je(new Date().toLocaleTimeString())}catch(l){E([]),he({available:0,monitored:0,missing:0,total:0}),n(l instanceof Error?l.message:"Failed to load aggregated Lidarr data","error")}finally{oe(!1)}},[f,d,n,re,x]);s.useEffect(()=>{c&&Re()},[c,Re]),s.useEffect(()=>{if(!c||!i||i==="aggregate")return;const a=N.current!==i;a&&(j.current={},K({}),O(1),B(0),N.current=i);const t=T.current;ye(i,a?0:y,t,{preloadAll:!0,showLoading:!0})},[c,i,ye,y]),s.useEffect(()=>{c&&i==="aggregate"&&Fe()},[c,i,Fe]),$e(()=>{i==="aggregate"&&$&&Fe({showLoading:!1})},i==="aggregate"&&$?1e3:null),s.useEffect(()=>{if(!c)return;const a=t=>{i==="aggregate"?(ue(t),ce(0)):i&&(B(0),ye(i,0,t,{preloadAll:!0,showLoading:!0}))};return S(a),()=>{I(a)}},[c,i,S,I,ye]),$e(()=>{if(i&&i!=="aggregate"){if(T.current?.trim?.()||"")return;ye(i,y,le,{preloadAll:!1,showLoading:!1})}},c&&i&&i!=="aggregate"&&$?1e3:null),s.useEffect(()=>{T.current=d},[d]),s.useEffect(()=>{i==="aggregate"&&ue(d)},[i,d]);const Te=s.useMemo(()=>{const a=be?be.toLowerCase():"",t=!!a,l=se!=="all";return p.filter(m=>{const L=m.album;if(t){const P=(L?.title??"").toString().toLowerCase(),k=(L?.artistName??"").toString().toLowerCase(),R=(m.__instance??"").toLowerCase();if(!P.includes(a)&&!k.includes(a)&&!R.includes(a))return!1}if(Ce&&L?.hasFile)return!1;if(l){const P=L?.reason;if(se==="Not being searched"){if(P!=="Not being searched"&&P)return!1}else if(P!==se)return!1}return!0})},[p,be,Ce,se]),Ae=!!be||se!=="all",ze=s.useMemo(()=>{const a=be?be.toLowerCase():"",t=!!a,l=se!=="all";return F.filter(m=>{if(t){const L=m.artistName.toLowerCase(),P=m.albumTitle.toLowerCase(),k=m.title.toLowerCase(),R=m.__instance.toLowerCase();if(!L.includes(a)&&!P.includes(a)&&!k.includes(a)&&!R.includes(a))return!1}if(Ce&&m.hasFile)return!1;if(l){if(se==="Not being searched"){if(m.reason!=="Not being searched"&&m.reason)return!1}else if(m.reason!==se)return!1}return!0})},[F,be,Ce,se]),Ke=s.useMemo(()=>{const a=Object.keys(C).map(Number).sort((l,m)=>l-m),t=[];return a.forEach(l=>{C[l]&&t.push(...C[l])}),t},[C]),qe=s.useMemo(()=>C[y]??[],[C,y]),Ue=s.useCallback(async()=>{if(!(!i||i==="aggregate"))try{await os(i),n(`Restarted ${i}`,"success")}catch(a){n(a instanceof Error?a.message:`Failed to restart ${i}`,"error")}},[i,n]),He=s.useCallback(a=>{const t=a.target.value||"aggregate";w(t),t!=="aggregate"&&b("")},[w,b]),De=i==="aggregate";return e.jsxs("section",{className:"card",children:[e.jsx("div",{className:"card-header",children:"Lidarr"}),e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"split",children:[e.jsxs("aside",{className:"pane sidebar",children:[f.length>1&&e.jsx("button",{className:`btn ${De?"active":""}`,onClick:()=>w("aggregate"),children:"All Lidarr"}),f.map(a=>e.jsx("button",{className:`btn ghost ${i===a.category?"active":""}`,onClick:()=>{w(a.category),b("")},children:a.name||a.category},a.category))]}),e.jsxs("div",{className:"pane",children:[e.jsxs("div",{className:"field mobile-instance-select",children:[e.jsx("label",{children:"Instance"}),e.jsxs("select",{value:i||"aggregate",onChange:He,disabled:!f.length,children:[f.length>1&&e.jsx("option",{value:"aggregate",children:"All Lidarr"}),f.map(a=>e.jsx("option",{value:a.category,children:a.name||a.category},a.category))]})]}),e.jsxs("div",{className:"row",style:{alignItems:"flex-end",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("div",{className:"col field",style:{flex:"1 1 200px"},children:[e.jsx("label",{children:"Search"}),e.jsx("input",{placeholder:"Filter albums",value:d,onChange:a=>b(a.target.value)})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Status"}),e.jsxs("select",{onChange:a=>{const t=a.target.value;Me(t==="missing")},value:Ce?"missing":"all",children:[e.jsx("option",{value:"all",children:"All Albums"}),e.jsx("option",{value:"missing",children:"Missing Only"})]})]}),e.jsxs("div",{className:"field",style:{flex:"0 0 auto",minWidth:"140px"},children:[e.jsx("label",{children:"Search Reason"}),e.jsxs("select",{onChange:a=>Le(a.target.value),value:se,children:[e.jsx("option",{value:"all",children:"All Reasons"}),e.jsx("option",{value:"Not being searched",children:"Not Being Searched"}),e.jsx("option",{value:"Missing",children:"Missing"}),e.jsx("option",{value:"Quality",children:"Quality"}),e.jsx("option",{value:"CustomFormat",children:"Custom Format"}),e.jsx("option",{value:"Upgrade",children:"Upgrade"})]})]})]}),De?e.jsx($s,{loading:J,rows:Te,trackRows:ze,page:ae,onPageChange:ce,onRefresh:()=>{Fe({showLoading:!0})},lastUpdated:Se,summary:pe,instanceCount:f.length,groupLidarr:x,isAggFiltered:Ae}):e.jsx(Is,{loading:X,data:V,page:y,totalPages:ee,pageSize:U,allAlbums:x?qe:Ke,onlyMissing:Ce,reasonFilter:se,onPageChange:a=>{B(a),ye(i,a,le,{preloadAll:!0})},onRestart:()=>{Ue()},lastUpdated:h,groupLidarr:x,instances:f,selection:i})]})]})})]})}function Us({type:c,active:n}){return c==="radarr"?e.jsx(Ps,{active:n}):c==="lidarr"?e.jsx(Es,{active:n}):e.jsx(Ds,{active:n})}export{Us as ArrView};
2
2
  //# sourceMappingURL=ArrView.js.map