1import{p as te,u as ie,r as i,s as k,v as u,w as p,j as e,x as F,y as L,z as P,ak as re,E as D,O as c,aC as W,bx as le,g as n,I as ne,ad as de,az as ce}from"./index-vaiBTE8b.js";import{c as oe}from"./tabs-VH8ueh4i.js";import{I as o}from"./input-BJcL1Yv_.js";import{L as l}from"./label-Crc-sGPv.js";import{T as me}from"./textarea-D-7wT4C2.js";import{S as T}from"./switch-D2qvIiYD.js";import{R as M}from"./refresh-cw-3SKWyKgq.js";import{S as X}from"./save-UaqTnARl.js";import{P as he}from"./plus-C-04PuFG.js";import{P as xe}from"./pen-line-jUJjmAFB.js";import{T as ue}from"./trash-2-YjQgH-o_.js";import"./index-C55GqFHc.js";function pe(d){const t=new Date(d),a=m=>String(m).padStart(2,"0");return`${t.getFullYear()}-${a(t.getMonth()+1)}-${a(t.getDate())}T${a(t.getHours())}:${a(t.getMinutes())}`}function Le({isAuthenticated:d}){const{toast:t}=te(),a=ie(),[m,q]=i.useState(""),[E,K]=i.useState(!1),[Y,G]=i.useState(!1),[J,v]=i.useState(!1),[h,Q]=i.useState(null),[g,j]=i.useState(""),[A,y]=i.useState(""),[f,N]=i.useState(""),[z,b]=i.useState(""),[O,S]=i.useState(!0),[V,w]=i.useState(""),[R,C]=i.useState(!1),{data:ve,isLoading:Z}=k({queryKey:["/api/admin/live-show/config"],enabled:d,select:s=>(Y||(q(s.muxStreamId??""),K(s.isLiveOverride),G(!0)),s)}),{data:$=[],isLoading:_}=k({queryKey:["/api/admin/live-show/schedule"],enabled:d}),{data:r}=k({queryKey:["/api/livestream/status"],enabled:d,refetchInterval:3e4}),I=u({mutationFn:s=>p("/api/admin/live-show/config","PATCH",s),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/live-show/config"]}),a.invalidateQueries({queryKey:["/api/livestream/status"]}),t({title:"Config saved"})},onError:()=>t({title:"Save failed",variant:"destructive"})}),H=u({mutationFn:s=>p("/api/admin/live-show/schedule","POST",s),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/live-show/schedule"]}),a.invalidateQueries({queryKey:["/api/livestream/status"]}),a.invalidateQueries({queryKey:["/api/livestream/replays"]}),t({title:"Show added"}),x()},onError:()=>t({title:"Failed to add show",variant:"destructive"})}),U=u({mutationFn:({id:s,...ae})=>p(`/api/admin/live-show/schedule/${s}`,"PATCH",ae),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/live-show/schedule"]}),a.invalidateQueries({queryKey:["/api/livestream/status"]}),a.invalidateQueries({queryKey:["/api/livestream/replays"]}),t({title:"Show updated"}),x()},onError:()=>t({title:"Failed to update",variant:"destructive"})}),B=u({mutationFn:s=>p(`/api/admin/live-show/schedule/${s}`,"DELETE"),onSuccess:()=>{a.invalidateQueries({queryKey:["/api/admin/live-show/schedule"]}),a.invalidateQueries({queryKey:["/api/livestream/status"]}),a.invalidateQueries({queryKey:["/api/livestream/replays"]}),t({title:"Show deleted"})},onError:()=>t({title:"Failed to delete",variant:"destructive"})});function x(){v(!1),Q(null),j(""),y(""),N(""),b(""),S(!0),w(""),C(!1)}function ee(s){Q(s.id),j(s.title),y(s.description??""),N(pe(s.showDatetime)),b(s.thumbnailUrl??""),S(s.isActive),w(s.vodPlaybackId??""),C(s.isCompleted),v(!0)}function se(){if(!g||!f){t({title:"Title and date/time are required",variant:"destructive"});return}const s={title:g,description:A||null,showDatetime:new Date(f).toISOString(),thumbnailUrl:z||null,isActive:O,vodPlaybackId:V.trim()||null,isCompleted:R};h!==null?U.mutate({id:h,...s}):H.mutate(s)}return e.jsxs(oe,{value:"live-show",className:"space-y-6",children:[e.jsxs("div",{className:"admin-page-header",children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Live Show"}),e.jsx("p",{className:"text-gray-500 text-sm",children:"Configure the homepage live stream widget and manage the show schedule."})]}),e.jsxs(F,{children:[e.jsx(L,{children:e.jsxs(P,{className:"flex items-center gap-2 text-base",children:[e.jsx(re,{className:"h-4 w-4 text-orange-500"}),"Current Status (homepage sees this)"]})}),e.jsx(D,{children:r?e.jsxs("div",{className:"flex items-center gap-3",children:[r.isLive?e.jsx(c,{className:"bg-red-500 text-white animate-pulse",children:"LIVE"}):e.jsx(c,{variant:"secondary",children:"Offline"}),r.playbackId&&e.jsxs("span",{className:"text-sm text-gray-500",children:["Playback ID: ",r.playbackId]}),!r.isLive&&r.nextShow&&e.jsxs("span",{className:"text-sm text-gray-500",children:["Next: ",e.jsx("strong",{children:r.nextShow.title})," at"," ",W(le(r.nextShow.showDatetime),"MMM d, yyyy h:mm a")]}),!r.isLive&&!r.nextShow&&e.jsx("span",{className:"text-sm text-gray-400",children:"No upcoming shows scheduled. Widget is hidden."})]}):e.jsx("span",{className:"text-sm text-gray-400",children:"Loading..."})})]}),e.jsxs(F,{children:[e.jsx(L,{children:e.jsx(P,{className:"text-base",children:"Mux Stream Settings"})}),e.jsx(D,{className:"space-y-4",children:Z?e.jsx(M,{className:"h-5 w-5 animate-spin text-orange-500"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{children:"Mux Live Stream ID"}),e.jsx(o,{placeholder:"e.g. abc123xyz",value:m,onChange:s=>q(s.target.value)}),e.jsx("p",{className:"text-xs text-gray-400",children:"Found in your Mux dashboard under Video / Live Streams. Leave blank to disable auto-detection."})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(T,{checked:E,onCheckedChange:K,id:"override-switch"}),e.jsx(l,{htmlFor:"override-switch",children:"Force LIVE override (shows player regardless of Mux status)"})]}),e.jsxs(n,{onClick:()=>I.mutate({muxStreamId:m.trim()||null,isLiveOverride:E}),disabled:I.isPending,className:"bg-orange-500 hover:bg-orange-600",children:[I.isPending?e.jsx(M,{className:"h-4 w-4 animate-spin mr-2"}):e.jsx(X,{className:"h-4 w-4 mr-2"}),"Save Config"]})]})})]}),e.jsxs(F,{children:[e.jsx(L,{children:e.jsxs(P,{className:"flex items-center justify-between text-base",children:[e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ne,{className:"h-4 w-4 text-orange-500"}
1),"Show Schedule"]}),e.jsxs(n,{size:"sm",onClick:()=>{x(),v(!0)},className:"bg-orange-500 hover:bg-orange-600",children:[e.jsx(he,{className:"h-4 w-4 mr-1"}),"Add Show"]})]})}),e.jsxs(D,{className:"space-y-4",children:[J&&e.jsxs("div",{className:"border rounded-lg p-4 space-y-3 bg-orange-50",children:[e.jsx("h4",{className:"font-medium",children:h?"Edit Show":"New Show"}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(l,{children:"Title"}),e.jsx(o,{value:g,onChange:s=>j(s.target.value),placeholder:"e.g. Bitcoin Weekly Live"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(l,{children:"Date and Time"}),e.jsx(o,{type:"datetime-local",value:f,onChange:s=>N(s.target.value)})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(l,{children:"Description"}),e.jsx(me,{value:A,onChange:s=>y(s.target.value),placeholder:"Short description shown in teaser card...",rows:2})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(l,{children:"Thumbnail URL (optional)"}),e.jsx(o,{value:z,onChange:s=>b(s.target.value),placeholder:"https://..."})]}),e.jsxs("div",{className:"border-t border-orange-200 pt-3 mt-3",children:[e.jsx("p",{className:"text-xs font-semibold text-orange-700 uppercase tracking-wider mb-3",children:"VOD Replay"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(l,{children:"Mux VOD Playback ID"}),e.jsx(o,{value:V,onChange:s=>w(s.target.value),placeholder:"e.g. abc123xyz (from Mux Assets)"}),e.jsx("p",{className:"text-xs text-gray-400",children:"Paste the Mux asset playback ID here after the stream ends. Found in Mux dashboard under Video / Assets."})]}),e.jsxs("div",{className:"flex items-center gap-3 mt-3",children:[e.jsx(T,{checked:R,onCheckedChange:C,id:"form-completed"}),e.jsx(l,{htmlFor:"form-completed",children:"Mark as completed (show on replays page)"})]})]}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx(T,{checked:O,onCheckedChange:S,id:"form-active"}),e.jsx(l,{htmlFor:"form-active",children:"Active (visible on homepage and replays)"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(n,{size:"sm",onClick:se,disabled:H.isPending||U.isPending,className:"bg-orange-500 hover:bg-orange-600",children:[e.jsx(X,{className:"h-4 w-4 mr-1"}),h?"Update":"Add Show"]}),e.jsxs(n,{size:"sm",variant:"outline",onClick:x,children:[e.jsx(de,{className:"h-4 w-4 mr-1"}),"Cancel"]})]})]}),_?e.jsx(M,{className:"h-5 w-5 animate-spin text-orange-500"}):$.length===0?e.jsx("p",{className:"text-sm text-gray-400",children:"No shows scheduled yet. Add one above."}):e.jsx("div",{className:"space-y-2",children:$.map(s=>e.jsxs("div",{className:"flex items-center justify-between p-3 border rounded-lg bg-white",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"font-medium text-sm truncate",children:s.title}),!s.isActive&&e.jsx(c,{variant:"secondary",className:"text-xs",children:"Inactive"}),s.isCompleted&&e.jsx(c,{className:"bg-green-100 text-green-700 border-green-200 text-xs",children:"Completed"}),s.vodPlaybackId&&e.jsxs(c,{className:"bg-blue-100 text-blue-700 border-blue-200 text-xs gap-1",children:[e.jsx(ce,{className:"h-2.5 w-2.5"}),"Replay ready"]})]}),e.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:W(new Date(s.showDatetime),"MMM d, yyyy h:mm a")}),s.description&&e.jsx("p",{className:"text-xs text-gray-400 mt-0.5 truncate",children:s.description}),s.vodPlaybackId&&e.jsxs("p",{className:"text-xs text-gray-400 mt-0.5 font-mono truncate",children:["VOD: ",s.vodPlaybackId]})]}),e.jsxs("div",{className:"flex gap-1 ml-3 shrink-0",children:[e.jsx(n,{size:"sm",variant:"outline",onClick:()=>ee(s),children:e.jsx(xe,{className:"h-3 w-3"})}),e.jsx(n,{size:"sm",variant:"outline",className:"text-red-500 hover:text-red-600",onClick:()=>B.mutate(s.id),disabled:B.isPending,children:e.jsx(ue,{className:"h-3 w-3"})})]})]},s.id))})]})]})]})}export{Le as AdminLiveShowTab};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.