/* Original PHP sessions and CSRF; no alternative login. */
'use strict';
(()=>{
 function init(){
  const root=document.querySelector('[data-team-v3]');if(!root||root.dataset.ready)return;root.dataset.ready='1';
  const form=root.querySelector('[data-team-compose]'),area=form.elements.body,status=root.querySelector('[data-team-status]'),messages=root.querySelector('[data-team-messages]'),menu=root.querySelector('[data-team-mentions]');
  const people=JSON.parse(document.querySelector('[data-team-people]').textContent),peer=form.elements.peer.value;let sending=false,polling=false;
  const csrf=form.elements.csrf_token.value;
  async function refresh(){if(document.hidden||polling||!root.isConnected)return;polling=true;try{const r=await fetch('api/team.php?peer='+encodeURIComponent(peer),{headers:{Accept:'application/json'}});const data=await r.json();if(!r.ok||!data.ok)throw Error(data.error||'Не удалось загрузить сообщения');const near=messages.scrollTop+messages.clientHeight>=messages.scrollHeight-90;messages.innerHTML=data.html;if(near)messages.scrollTop=messages.scrollHeight;}catch(e){status.textContent=e.message;}finally{polling=false;}}
  async function send(data){const r=await fetch('api/team.php',{method:'POST',body:data,headers:{Accept:'application/json'}});const out=await r.json();if(!r.ok||!out.ok)throw Error(out.error||'Действие не выполнено');return out;}
  form.addEventListener('submit',async e=>{e.preventDefault();if(sending||!area.value.trim())return;sending=true;const button=form.querySelector('[type=submit]');button.disabled=true;status.textContent='Отправка…';try{await send(new FormData(form));area.value='';form.elements.reply_id.value='0';root.querySelector('[data-team-reply-note]').hidden=true;form.elements.client_id.value=crypto.randomUUID().replaceAll('-','');status.textContent='Отправлено';menu.hidden=true;await refresh();messages.scrollTop=messages.scrollHeight;}catch(e){status.textContent=e.message;}finally{sending=false;button.disabled=false;}});
  area.addEventListener('keydown',e=>{if(e.key==='Enter'&&!e.shiftKey){e.preventDefault();if(!menu.hidden)menu.querySelector('button')?.click();else form.requestSubmit();}if(e.key==='Escape')menu.hidden=true;});
  area.addEventListener('input',()=>{const left=area.value.slice(0,area.selectionStart),match=left.match(/(?:^|\s)@([^@\n]*)$/);menu.replaceChildren();if(!match){menu.hidden=true;return;}const found=people.filter(u=>u.name.toLocaleLowerCase().includes(match[1].toLocaleLowerCase())).slice(0,8);menu.hidden=!found.length;for(const u of found){const b=document.createElement('button');b.type='button';b.textContent=u.name;b.onclick=()=>{const pos=area.selectionStart,start=area.value.slice(0,pos).lastIndexOf('@');area.setRangeText('@'+u.name+' ',start,pos,'end');menu.hidden=true;area.focus();};menu.append(b);}});
  root.querySelector('[data-team-cancel-reply]').onclick=()=>{form.elements.reply_id.value='0';root.querySelector('[data-team-reply-note]').hidden=true;};
  messages.addEventListener('click',async e=>{const reply=e.target.closest('[data-team-reply]');if(reply){form.elements.reply_id.value=reply.dataset.teamReply;const note=root.querySelector('[data-team-reply-note]');note.querySelector('span').textContent=reply.dataset.teamReply;note.hidden=false;area.focus();return;}
    const button=e.target.closest('[data-team-edit],[data-team-delete]');if(!button)return;const edit=button.hasAttribute('data-team-edit');const id=edit?button.dataset.teamEdit:button.dataset.teamDelete;let body='';if(edit){body=prompt('Изменить сообщение',button.closest('[data-message-id]').querySelector('.az-message-text').innerText);if(body===null)return;}else if(!confirm('Удалить сообщение? Связанное поручение останется.'))return;button.disabled=true;try{await send(new URLSearchParams({csrf_token:csrf,action:edit?'edit_message':'delete_message',message_id:id,body}));await refresh();}catch(e){status.textContent=e.message;}finally{button.disabled=false;}
  });
  const timer=setInterval(refresh,7000);document.addEventListener('az:before-page-swap',()=>clearInterval(timer),{once:true});
  const target=new URLSearchParams(location.search).get('message');if(target)messages.querySelector('#message-'+CSS.escape(target))?.scrollIntoView({block:'center'});else messages.scrollTop=messages.scrollHeight;
 }
 init();document.addEventListener('az:page-ready',init);
})();
