let friends = [];
let shareTargetId = null;
async function checkSession() {
const res = await fetch('/api/session');
const data = await res.json();
if (data.role !== 'admin') {
window.location.href = '/';
}
}
async function loadFriends() {
const res = await fetch('/api/friends');
if (res.status === 401) { window.location.href = '/'; return; }
const data = await res.json();
friends = data.friends || [];
renderFriends();
}
function renderFriends() {
const grid = document.getElementById('friendGrid');
const emptyMsg = document.getElementById('emptyMsg');
grid.innerHTML = '';
emptyMsg.style.display = friends.length ? 'none' : 'block';
friends.forEach((f) => {
const el = document.createElement('div');
el.className = 'friend-card';
const thumbHtml = f.profileImage
? ``
: `
${data.error}
`; return; } document.getElementById('newName').value = ''; loadFriends(); }); async function deleteFriend(id) { const f = friends.find((x) => x.id === id); if (!confirm(`"${f ? f.name : 'Freund'}" wirklich löschen? Alle Fotos und Einträge gehen dabei verloren.`)) return; const res = await fetch(`/api/friends/${id}`, { method: 'DELETE' }); if (res.ok) loadFriends(); } function openShareModal(id) { shareTargetId = id; const f = friends.find((x) => x.id === id); document.getElementById('shareFriendName').textContent = f ? f.name : ''; document.getElementById('sharePw').value = ''; document.getElementById('shareErr').innerHTML = ''; const linkBox = document.getElementById('shareLinkBox'); if (f && f.shareEnabled) { linkBox.style.display = 'block'; document.getElementById('shareLinkInput').value = `${window.location.origin}/share/${id}`; } else { linkBox.style.display = 'none'; } document.getElementById('shareModal').style.display = 'flex'; } document.getElementById('shareCloseBtn').addEventListener('click', () => { document.getElementById('shareModal').style.display = 'none'; }); document.getElementById('shareEnableBtn').addEventListener('click', async () => { const pw = document.getElementById('sharePw').value; const errBox = document.getElementById('shareErr'); errBox.innerHTML = ''; const res = await fetch(`/api/friends/${shareTargetId}/share`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ enabled: true, password: pw }), }); const data = await res.json(); if (!res.ok) { errBox.innerHTML = `${data.error}
`; return; } document.getElementById('shareLinkBox').style.display = 'block'; document.getElementById('shareLinkInput').value = `${window.location.origin}/share/${shareTargetId}`; await loadFriends(); }); document.getElementById('shareDisableBtn').addEventListener('click', async () => { const res = await fetch(`/api/friends/${shareTargetId}/share`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ enabled: false }), }); if (res.ok) { document.getElementById('shareLinkBox').style.display = 'none'; await loadFriends(); } }); document.getElementById('copyLinkBtn').addEventListener('click', () => { const input = document.getElementById('shareLinkInput'); input.select(); navigator.clipboard.writeText(input.value).catch(() => {}); }); document.getElementById('logoutBtn').addEventListener('click', async () => { await fetch('/api/logout', { method: 'POST' }); window.location.href = '/'; }); checkSession(); loadFriends();