import{D as e,E as t,H as n,Ht as r,J as i,M as a,N as o,O as s,Q as c,T as l,Vt as ee,X as u,ct as d,j as f,l as te,lt as p,ot as ne,q as re,t as ie,w as m,wt as h,y as g,yt as _}from"./client-CT8bsOZT.js";import{t as ae}from"./Card-BlPMoL4K.js";import{t as v}from"./Button-C2NTKdUd.js";import{t as oe}from"./Select-BLMRw90Q.js";import{n as se,r as ce}from"./es-_Sej-67j.js";import{t as le}from"./QrCode-VQE44Zo-.js";import{tt as y}from"./index-BQxhgcbs.js";import{t as ue}from"./HeaderMenu-DkaatIAZ.js";import{t as b}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{r as x}from"./application-DrhMrvIJ.js";import{t as de}from"./useSimplePolling-yv2K0bkR.js";import{t as fe}from"./datetime-BJNH0M1T.js";var pe={key:0,class:`screen-center`},me={key:1,class:`screen-page`},he={key:0,class:`screen-center`},ge={key:0,class:`screen-center`},_e={key:0,class:`screen-qr`},ve={key:0,class:`media-error`},ye={key:1,class:`screen-media`},be=[`src`,`muted`],xe={key:2,class:`conclusion-screen`},Se=[`src`,`muted`],Ce={key:3,class:`screen-message`},we={key:4,class:`screen-message`},Te={key:5,class:`screen-message`},Ee={key:6,class:`screen-message`},De={key:7,class:`timer-screen`},Oe={class:`timer-label`},ke={class:`timer-value`},Ae={key:9,class:`screen-cover`},je=[`src`],Me={key:1,class:`cover-controls`},S=`evening-detective-screen-session`,C=b(o({__name:`ScreenPage`,setup(o){let b=ie(),C=se(),w=ce(),T=te(),E=_(``),D=_(``),O=_(),k=_([]),A=_([]),j=_(),M,N=!1,P=_([]),F=_(null),I=_(!1),L=_(``),R=_(!0),z=_(!1),B=_(!1),V=_(Date.now()),H=_(0),U=_(Date.now()),W=_(),G=_(!1),K=_(),q=_(),J=0,Y=null,X=m(()=>!!(T.query.screenID&&T.query.accessToken)),Z=m(()=>{if(!E.value||!D.value)return``;let e=new URL(`/screen`,window.location.origin);return e.searchParams.set(`screenId`,E.value),e.searchParams.set(`accessToken`,D.value),e.toString()}),Ne=m(()=>P.value.map(e=>({label:`${fe(e.startAt).split(`,`)[0]||`дата не указана`} — ${e.name||`Игра ${e.ID}`}`,value:e.ID}))),Q=m(()=>O.value?.mode||`SCREEN_MODE_COVER`),Pe=m(()=>O.value?.timerState===`SCREEN_TIMER_STATE_RUNNING`?Math.max(0,H.value-(V.value-U.value)/1e3):H.value),Fe=m(()=>{let e=Math.floor(Pe.value/60),t=Math.floor(Pe.value%60);return`${String(e).padStart(2,`0`)}:${String(t).padStart(2,`0`)}`}),Ie=m(()=>x(O.value?.introAudio)),Le=m(()=>x(O.value?.conclusionVideo)),Re=m(()=>{let e=O.value?.backgroundImage||O.value?.coverImage;return e?{backgroundImage:`linear-gradient(rgb(0 0 0 / 55%), rgb(0 0 0 / 55%)), url("${e}")`}:{}});function ze(){sessionStorage.setItem(S,JSON.stringify({screenID:E.value,accessToken:D.value}))}function Be(e){let t=Math.max(0,Number(e?.timerRemainingSeconds||0));if(e?.timerState===`SCREEN_TIMER_STATE_RUNNING`&&W.value===e.timerState){let e=Math.max(0,H.value-(Date.now()-U.value)/1e3);if(Math.abs(t-e)<=.5)return}H.value=t,U.value=Date.now(),W.value=e?.timerState}function Ve(){try{let e=JSON.parse(sessionStorage.getItem(S)||`{}`);E.value=e.screenId||``,D.value=e.accessToken||``}catch{sessionStorage.removeItem(S)}}async function He(){let e=await b.CreateScreenSession({});if(!e.screenID||!e.accessToken)throw Error(`Не удалось создать сессию экрана`);E.value=e.screenID,D.value=e.accessToken,ze()}async function $(e=!0){if(!(!E.value||!D.value))try{let e=await b.GetScreenState({screenID:E.value,accessToken:D.value});O.value=e.state,Be(O.value),O.value?.gameID&&O.value.mode===`SCREEN_MODE_RESULTS`&&await Ue()}catch(t){if(e&&t instanceof Error&&t.message===`unauthorized`){sessionStorage.removeItem(S),E.value=``,D.value=``,await He(),await $(!1);return}w.error(t instanceof Error?t.message:`Не удалось получить состояние экрана`)}}async function Ue(){if(!E.value||!D.value)return;let e=await b.GetScreenResults({screenID:E.value,accessToken:D.value});if(A.value=e.questions||[],k.value=e.teams||[],!N){N=!0,await n();let e=j.value;e&&(e.scrollTop=e.scrollHeight,M=window.setInterval(()=>{e.scrollTop=Math.max(0,e.scrollTop-32),e.scrollTop===0&&M!=null&&(window.clearInterval(M),M=void 0)},1e3))}}async function We(){try{let e=await C.GetGames({});P.value=e.games||[]}catch(e){w.error(e instanceof Error?e.message:`Не удалось загрузить игры`)}}de(()=>{G.value&&$()},1e3),ne(O,async e=>{if(!e||!e.command||e.stateVersion===J)return;J=e.stateVersion||0,await n();let t=Q.value===`SCREEN_MODE_CONCLUSION`?q.value:K.value;t&&(t.currentTime=(e.positionMs||0)/1e3,t.volume=Math.max(0,Math.min(1,(e.volume??100)/100)),e.command!==`SCREEN_COMMAND_SEEK`&&e.command!==`SCREEN_COMMAND_VOLUME`&&(e.command===`SCREEN_COMMAND_PLAY`||e.command===`SCREEN_COMMAND_RESUME`||e.command===`SCREEN_COMMAND_REPLAY`?(e.command===`SCREEN_COMMAND_REPLAY`&&(t.currentTime=0),t.play().catch(()=>{L.value=`Браузер заблокировал воспроизведение. Нажмите «Подготовить экран» на этом устройстве.`})):(e.command===`SCREEN_COMMAND_PAUSE`||e.command===`SCREEN_COMMAND_STOP`)&&t.pause()))});async function Ge(){if(!(!F.value||!T.query.screenID||!T.query.accessToken)){z.value=!0;try{await C.BindScreen({screenID:String(T.query.screenID),accessToken:String(T.query.accessToken),gameID:F.value}),B.value=!0}catch(e){w.error(e instanceof Error?e.message:`Не удалось привязать экран`)}finally{z.value=!1}}}async function Ke(){try{await document.documentElement.requestFullscreen?.()}catch{w.warning(`Полноэкранный режим недоступен в этом браузере`)}I.value=!0,await n();for(let e of[K.value,q.value])if(e){e.muted=!0;try{await e.play(),e.pause(),e.currentTime=0,e.muted=!O.value?.soundEnabled}catch{L.value=`Браузер не разрешил подготовить воспроизведение на этом устройстве.`}}}return re(async()=>{if(X.value){await We(),R.value=!1;return}Ve();try{(!E.value||!D.value)&&await He(),await $(),G.value=!0,Y=window.setInterval(()=>{V.value=Date.now()},250)}catch(e){w.error(e instanceof Error?e.message:`Не удалось подготовить экран`)}finally{R.value=!1}}),i(()=>{Y!=null&&window.clearInterval(Y),M!=null&&window.clearInterval(M)}),(n,i)=>(u(),s(g,null,[X.value?(u(),s(`div`,pe,[a(h(ae),{class:`binding-card`,title:`Привязка экрана`},{default:d(()=>[B.value?(u(),s(g,{key:0},[i[1]||=l(`p`,null,`Экран привязан к игре.`,-1),i[2]||=l(`p`,null,`Можно закрыть эту страницу.`,-1)],64)):(u(),s(g,{key:1},[i[4]||=l(`p`,null,`Выберите игру, к которой привязать экран.`,-1),a(h(oe),{value:F.value,"onUpdate:value":i[0]||=e=>F.value=e,options:Ne.value,placeholder:`Игра`},null,8,[`value`,`options`]),a(h(v),{type:`primary`,loading:z.value,disabled:F.value==null,onClick:Ge},{default:d(()=>[...i[3]||=[f(` Привязать `,-1)]]),_:1},8,[`loading`,`disabled`])],64))]),_:1})])):(u(),s(`div`,me,[R.value?(u(),s(`div`,he,`Подготовка экрана…`)):(u(),s(g,{key:1},[O.value?.gameID?(u(),s(`div`,{key:1,class:`screen-content`,style:ee(Re.value)},[L.value?(u(),s(`p`,ve,r(L.value),1)):e(``,!0),O.value.introAudio?p((u(),s(`div`,ye,[l(`audio`,{ref_key:`introAudioElement`,ref:K,src:Ie.value,muted:!O.value.soundEnabled,controls:``},null,8,be)],512)),[[y,Q.value===`SCREEN_MODE_INTRO`]]):e(``,!0),O.value.conclusionVideo?p((u(),s(`div`,xe,[l(`video`,{ref_key:`conclusionVideoElement`,ref:q,src:Le.value,muted:!O.value.soundEnabled,playsinline:``},null,8,Se)],512)),[[y,Q.value===`SCREEN_MODE_CONCLUSION`]]):e(``,!0),Q.value===`SCREEN_MODE_CONCLUSION`&&!O.value.conclusionVideo?(u(),s(`div`,Ce,`Видео закрывашки не задано`)):e(``,!0),Q.value===`SCREEN_MODE_INTRO_DONE`?(u(),s(`div`,we,`Успехов`)):e(``,!0),Q.value===`SCREEN_MODE_CONCLUSION_DONE`?(u(),s(`div`,Te,`Спасибо за игру!`)):e(``,!0),Q.value===`SCREEN_MODE_TEXT`?(u(),s(`div`,Ee,r(O.value.text),1)):e(``,!0),Q.value===`SCREEN_MODE_TIMER`?(u(),s(`div`,De,[l(`h1`,Oe,r(O.value.timerLabel||`Перерыв`),1),l(`div`,ke,r(Fe.value),1)])):e(``,!0),Q.value===`SCREEN_MODE_RESULTS`?(u(),s(`div`,{key:8,ref_key:`resultsContainer`,ref:j,class:`results-screen`},[i[11]||=l(`h1`,null,`Результаты`,-1),l(`table`,null,[l(`thead`,null,[l(`tr`,null,[i[7]||=l(`th`,null,`Место`,-1),i[8]||=l(`th`,null,`Команда`,-1),(u(!0),s(g,null,c(A.value,e=>(u(),s(`th`,{key:e.code},r(e.code),1))),128)),i[9]||=l(`th`,null,`Сумма`,-1),i[10]||=l(`th`,null,`Ходы`,-1)])]),l(`tbody`,null,[(u(!0),s(g,null,c(k.value,e=>(u(),s(`tr`,{key:e.team?.ID},[l(`td`,null,r(e.place),1),l(`td`,null,r(e.team?.name),1),(u(!0),s(g,null,c(A.value,t=>(u(),s(`td`,{key:t.code},r(e.answers?.find(e=>e.questionCode===t.code)?.score??0),1))),128)),l(`td`,null,r(e.totalScore),1),l(`td`,null,r(e.actionsCount),1)]))),128))])])],512)):e(``,!0),Q.value===`SCREEN_MODE_COVER`?(u(),s(`div`,Ae,[O.value.coverImage?(u(),s(`img`,{key:0,src:O.value.coverImage,class:`cover-image`,alt:`Обложка дела`},null,8,je)):e(``,!0),I.value?e(``,!0):(u(),s(`div`,Me,[a(h(v),{type:`primary`,onClick:Ke},{default:d(()=>[...i[12]||=[f(`Подготовить экран`,-1)]]),_:1})]))])):e(``,!0)],4)):(u(),s(`div`,ge,[a(h(ae),{class:`qr-card`,title:`Подключение экрана`},{default:d(()=>[Z.value?(u(),s(`div`,_e,[a(h(le),{value:Z.value,size:260,padding:0},null,8,[`value`])])):e(``,!0),i[6]||=l(`p`,null,`Отсканируйте QR телефоном организатора и выберите игру.`,-1),I.value?e(``,!0):(u(),t(h(v),{key:1,type:`primary`,onClick:Ke},{default:d(()=>[...i[5]||=[f(`Подготовить экран`,-1)]]),_:1}))]),_:1})]))],64))])),X.value?(u(),t(ue,{key:2,active:`games`})):e(``,!0)],64))}}),[[`__scopeId`,`data-v-c2081c29`]]),w=o({__name:`ScreenView`,setup(e){return(e,n)=>(u(),t(C))}});export{w as default};