(function() { 'use strict'; var CONFIG = { API_BASE: 'https://vai-registration.netlify.app/.netlify/functions', ENROLLED_CACHE_KEY: 'vai_enrolled_cache', ENROLLED_CACHE_DURATION: 300000 }; var currentUser = null; function init() { if (typeof window.circleUser === 'undefined') { setTimeout(function() { if (typeof window.circleUser !== 'undefined') { currentUser = window.circleUser; console.log('[VAI Widget] Initialized for user:', currentUser.name); initIdentityMirror(); } else { console.log('[VAI Widget] No user context'); hideIdentityMirror(); } initEnrolled(); }, 1000); return; } currentUser = window.circleUser; console.log('[VAI Widget] Initialized for user:', currentUser.name); initIdentityMirror(); initEnrolled(); } function initIdentityMirror() { var container = document.querySelector('[data-vai-identity]'); if (!container || !currentUser) return; var avatarImg = container.querySelector('[data-vai-identity-avatar]'); var nameEl = container.querySelector('[data-vai-identity-name]'); if (avatarImg && currentUser.avatar_url) { avatarImg.src = currentUser.avatar_url; avatarImg.alt = currentUser.name; } if (nameEl) { var firstName = currentUser.name.split(' ')[0]; nameEl.textContent = 'Join them, ' + firstName; } container.style.display = 'flex'; } function hideIdentityMirror() { var container = document.querySelector('[data-vai-identity]'); if (container) container.style.display = 'none'; } function initEnrolled() { var cached = getCachedEnrolled(); if (cached) { renderEnrolled(cached); return; } fetch(CONFIG.API_BASE + '/enrolled') .then(function(response) { if (!response.ok) throw new Error('Enrolled API error'); return response.json(); }) .then(function(data) { setCachedEnrolled(data); renderEnrolled(data); }) .catch(function(err) { console.error('[VAI Widget] Enrolled error:', err); renderEnrolledError(); }); } function getCachedEnrolled() { try { var cached = localStorage.getItem(CONFIG.ENROLLED_CACHE_KEY); if (!cached) return null; var parsed = JSON.parse(cached); if (Date.now() - parsed.timestamp > CONFIG.ENROLLED_CACHE_DURATION) { localStorage.removeItem(CONFIG.ENROLLED_CACHE_KEY); return null; } return parsed.data; } catch (e) { return null; } } function setCachedEnrolled(data) { try { localStorage.setItem(CONFIG.ENROLLED_CACHE_KEY, JSON.stringify({ data: data, timestamp: Date.now() })); } catch (e) {} } function renderEnrolled(data) { var membersContainer = document.querySelector('[data-vai-enrolled-members]'); if (membersContainer && data.members && data.members.length > 0) { var html = ''; for (var i = 0; i < data.members.length; i++) { var member = data.members[i]; var avatarUrl = member.avatar_url || 'https://via.placeholder.com/56'; var name = member.name || ''; var firstName = member.first_name || (name ? name.split(' ')[0] : ''); html += '
'; html += '' + name + ''; html += '' + firstName + ''; html += '
'; } membersContainer.innerHTML = html; var enrolledSection = document.querySelector('[data-vai-enrolled]'); if (enrolledSection) enrolledSection.style.display = 'block'; } else { var enrolledSection = document.querySelector('[data-vai-enrolled]'); if (enrolledSection) enrolledSection.style.display = 'none'; } renderSpots(data.spots_remaining, data.capacity); } function renderEnrolledError() { var enrolledSection = document.querySelector('[data-vai-enrolled]'); if (enrolledSection) enrolledSection.style.display = 'none'; } function renderSpots(remaining, capacity) { var visualContainer = document.querySelector('[data-vai-spots-visual]'); var textContainer = document.querySelector('[data-vai-spots-text]'); if (visualContainer && capacity) { var filled = capacity - remaining; var html = ''; for (var i = 0; i < capacity; i++) { if (i < filled) { html += '
'; } else { html += '
'; } } visualContainer.innerHTML = html; } if (textContainer && remaining !== undefined) { textContainer.innerHTML = '' + remaining + ' spot' + (remaining !== 1 ? 's' : '') + ' remaining'; } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();