var _inited = false;
var MILESTONES_DATA = {}; // Will be loaded from API
document.addEventListener('tabChanged', function(e) {
if (e.detail.tab !== 'wellvisit' || _inited) return;
_inited = true;
initMilestones();
});
function initMilestones() {
var ageSelect = document.getElementById('ms-age-group');
var checklist = document.getElementById('milestone-checklist');
var actionsBar = document.getElementById('milestone-actions');
var allYesBtn = document.getElementById('ms-all-yes');
var allClearBtn = document.getElementById('ms-all-clear');
var generateBtn = document.getElementById('ms-generate-btn');
var outputCard = document.getElementById('ms-output');
var summaryBar = document.getElementById('ms-summary-bar');
var narrativeText = document.getElementById('ms-narrative-text');
var modelTag = document.getElementById('ms-model-tag');
var state = {};
// Load milestones from API (database), fallback to static data if empty
fetch('/api/milestones-data', {
headers: getAuthHeaders()
})
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.success && data.milestones && Object.keys(data.milestones).length > 0) {
// Database has milestones - use them
MILESTONES_DATA = data.milestones;
populateAgeGroups();
} else {
// Database empty - fallback to static data
console.log('[Milestones] Database empty, using static data');
if (typeof window.MILESTONES_DATA_STATIC !== 'undefined') {
MILESTONES_DATA = window.MILESTONES_DATA_STATIC;
populateAgeGroups();
} else {
showToast('Milestones data not available', 'error');
}
}
})
.catch(function(err) {
console.error('[Milestones] Load error, falling back to static:', err);
// Fallback to static data on API error
if (typeof window.MILESTONES_DATA_STATIC !== 'undefined') {
MILESTONES_DATA = window.MILESTONES_DATA_STATIC;
populateAgeGroups();
} else {
showToast('Failed to load milestones: ' + err.message, 'error');
}
});
function populateAgeGroups() {
// Populate age group dropdown
if (ageSelect && Object.keys(MILESTONES_DATA).length > 0) {
ageSelect.innerHTML = '';
Object.keys(MILESTONES_DATA).forEach(function(age) {
var opt = document.createElement('option');
opt.value = age;
opt.textContent = age;
ageSelect.appendChild(opt);
});
}
}
ageSelect.addEventListener('change', function() {
var age = ageSelect.value;
state = {};
outputCard.classList.add('hidden');
if (!age || !MILESTONES_DATA[age]) {
checklist.innerHTML = '
Select an age group.
';
actionsBar.style.display = 'none';
return;
}
renderChecklist(MILESTONES_DATA[age]);
actionsBar.style.display = 'flex';
});
function safeId(s) { return s.replace(/[^a-zA-Z0-9]/g, '_'); }
function renderChecklist(data) {
checklist.innerHTML = '';
Object.keys(data).forEach(function(domain) {
var items = data[domain];
var config = DOMAIN_CONFIG[domain] || { icon: '📋', css: '' };
var section = document.createElement('div');
section.className = 'domain-section ' + config.css;
var html = '