const bridge=window.psiqCommunityBridge;
const byId=id=>document.getElementById(id);
const escape=value=>String(value??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
const slug=name=>'membro-'+name.normalize('NFD').replace(/[\u0300-\u036f]/g,'').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'');
const initials=name=>name.trim().split(/\s+/).slice(0,2).map(n=>n[0]||'').join('').toUpperCase();
const screen=document.createElement('section');screen.id='public-community';screen.className='public-community';screen.hidden=true;byId('main').insertBefore(screen,byId('main').querySelector(':scope > .footer'));
const chats=new Map();
function people(){const self=bridge.self();const list=[{id:'eu',name:self.name,bio:self.bio,role:'Membro',own:true}];const known=new Set();for(const post of bridge.posts()){if(post.example===false)continue;const id=slug(post.author);if(known.has(id))continue;known.add(id);list.push({id,name:post.author,bio:post.role==='Professor'?'Professor da comunidade Psiq Raiz. Perfil de demonstração.':'Este é um perfil de exemplo para conhecer a comunidade e testar a navegação.',role:post.role||'Membro',own:false})}for(const person of list){bridge.register('perfil-'+person.id,['Perfil de '+person.name,'COMUNIDADE',person.name,'Perfil público da comunidade.','user']);if(!person.own)bridge.register('mensagens-para-'+person.id,['Conversa com '+person.name,'MENSAGENS',person.name,'Prévia de conversa privada.','chat'])}return list}
function personById(id){return people().find(p=>p.id===id)}
function selfPhoto(){return document.querySelector('#profile-toggle [data-avatar] img')?.getAttribute('src')||null}
function avatar(person){const photo=person.own?selfPhoto():null;return `${photo?`
`:escape(initials(person.name))}`}
function about(person){return person.bio||'Ainda não adicionou uma bio.'}
function renderDirectory(){const list=people();screen.innerHTML=`
Conheça as pessoas da comunidade. Clique no nome, na foto ou na bio para abrir o perfil.
Prévia local: os outros perfis são exemplos. O diretório compartilhado será conectado ao backend.
`}
function postsFor(person){return bridge.posts().filter(post=>person.own?post.example===false:post.example!==false&&slug(post.author)===person.id)}
function renderProfile(person){const posts=postsFor(person);screen.innerHTML=`${avatar(person)}
${escape(person.name)}
${escape(person.role)} · Comunidade Psiq RaizSobre
${escape(about(person))}
${person.own?'Foto, nome e bio compõem seu perfil público para os membros. Financeiro e configurações ficam na sua área pessoal.
':''}Publicações na comunidade
${posts.length?posts.map(post=>`${post.space==='apresente'?'Se apresente':'Feed'}${escape(post.title)}
${escape(post.body)}
Ver no espaço →`).join(''):'Ainda não há publicações nesta prévia.
'}Perfil demonstrativo. As informações ainda não são compartilhadas entre contas e desaparecem ao recarregar.
`}
function renderMessages(person){if(!person){screen.innerHTML=``;return}const messages=chats.get(person.id)||[];screen.innerHTML=``}
function decoratePostProfiles(){const list=people(),posts=bridge.posts(),space=location.hash.slice(1);document.querySelectorAll('#post-list .post').forEach(article=>{const name=article.querySelector('.post-person strong');if(!name)return;const matching=posts.find(p=>p.space===space&&p.title===article.querySelector('h2')?.textContent);const person=matching?.example===false?list[0]:list.find(p=>!p.own&&p.name===name.textContent);if(!person)return;[name,article.querySelector('.post-top>.avatar')].filter(Boolean).forEach(node=>{node.dataset.publicProfile=person.id;node.tabIndex=0;node.setAttribute('role','link');node.setAttribute('aria-label','Ver perfil de '+person.name);node.classList.add('public-profile-link')})})}
function renderCommunity(){screen.hidden=true;if(!bridge.ready())return;people();const key=location.hash.slice(1),profileId=key.startsWith('perfil-')?key.slice(7):null,recipientId=key.startsWith('mensagens-para-')?key.slice(15):null;const isCommunity=key==='membros'||key==='mensagens'||profileId!==null||recipientId!==null;if(!isCommunity){decoratePostProfiles();return}document.querySelectorAll('#home-content,#section-content,#feed-content,#onboard-content,#course-content,#events-content,#finance-content,.main>.heading,.main>.crumb').forEach(node=>node.hidden=true);screen.hidden=false;if(key==='membros')renderDirectory();else if(key==='mensagens')renderMessages(null);else if(profileId!==null){const person=personById(profileId);if(person)renderProfile(person);else screen.innerHTML='Perfil não encontrado
Voltar aos membros'}else{const person=personById(recipientId);if(person&&!person.own)renderMessages(person);else renderMessages(null)}window.closeProfile();window.closeSidebar();const menuPerson=document.querySelector('#profile-menu .menu-person');menuPerson.dataset.publicProfile='eu';menuPerson.tabIndex=0;menuPerson.setAttribute('role','link');menuPerson.setAttribute('aria-label','Ver meu perfil')}
const originalNavigate=window.navigate;window.navigate=function(...args){originalNavigate(...args);renderCommunity()};
const originalFeed=window.renderFeed;window.renderFeed=function(...args){originalFeed(...args);decoratePostProfiles()};
window.addEventListener('hashchange',renderCommunity);
document.addEventListener('click',event=>{const edit=event.target.closest('[data-edit-community-profile]');if(edit){event.preventDefault();window.openDialog('Editar perfil','Sua foto, nome e bio aparecem no seu perfil para a comunidade.',true);return}const target=event.target.closest('[data-public-profile]');if(!target)return;event.preventDefault();event.stopPropagation();const route='perfil-'+target.dataset.publicProfile;if(location.hash==='#'+route)renderCommunity();else location.hash=route},true);
document.addEventListener('keydown',event=>{if(!['Enter',' '].includes(event.key))return;const target=event.target.closest('[data-public-profile][role=link]');if(target){event.preventDefault();target.click()}});
byId('profile-form').addEventListener('submit',()=>queueMicrotask(renderCommunity));
document.addEventListener('submit',event=>{if(event.target.id!=='community-chat-form')return;event.preventDefault();const person=personById(event.target.dataset.recipient),field=byId('community-message'),text=field.value.trim();if(!person||person.own||!text){field.setCustomValidity('Escreva uma mensagem de exemplo.');field.reportValidity();return}const messages=chats.get(person.id)||[];messages.push(text.slice(0,3000));chats.set(person.id,messages);renderMessages(person);byId('community-message').focus()});
document.addEventListener('input',event=>{if(event.target.id==='community-message')event.target.setCustomValidity('')});
byId('logout').addEventListener('click',()=>{chats.clear();screen.hidden=true});
const menuPerson=document.querySelector('#profile-menu .menu-person');menuPerson.dataset.publicProfile='eu';menuPerson.tabIndex=0;menuPerson.setAttribute('role','link');menuPerson.setAttribute('aria-label','Ver meu perfil');
people();renderCommunity();