// Production - The Idle Game: Corporate Milestones View // Fine-grained DOM updates without innerHTML teardowns import { ACHIEVEMENTS } from '../data/achievements.js'; import { fmtCurrency, fmtNum } from '../core/formatters.js'; export function mountAchievements(container, state, onAction) { const achState = state.achievements || {}; let html = `

Corporate Milestones & Accolades

Track your corporate conglomerate's historical accomplishments across production, revenue, tenders, and stock market triumphs.

`; for (const ach of ACHIEVEMENTS) { const currentTier = achState[ach.id] || 0; let currentVal = 0; if (ach.reqType === 'total_produced') currentVal = state.stats.totalProduced || 0; else if (ach.reqType === 'total_revenue') currentVal = state.lifetimeRevenue || 0; else if (ach.reqType === 'contracts_completed') currentVal = state.stats.contractsCompleted || 0; else if (ach.reqType === 'ipo_count') currentVal = state.ipoCount || 0; else if (ach.reqType === 'managers_hired') currentVal = state.stats.managersHired || 0; const maxTier = ach.thresholds.length; const isMaxed = currentTier >= maxTier; const nextThreshold = !isMaxed ? ach.thresholds[currentTier] : ach.thresholds[maxTier - 1]; const progressPct = isMaxed ? 100 : Math.min(100, Math.floor((currentVal / nextThreshold) * 100)); html += `

${ach.title}

Tier ${currentTier} / ${maxTier}

${ach.description}

${ach.reqType === 'total_revenue' ? fmtCurrency(currentVal) : fmtNum(currentVal, 0)} ${isMaxed ? 'Completed!' : (ach.reqType === 'total_revenue' ? fmtCurrency(nextThreshold) : fmtNum(nextThreshold, 0))}
`; } html += `
`; container.innerHTML = html; } export function updateAchievements(container, state) { const achState = state.achievements || {}; for (const ach of ACHIEVEMENTS) { const currentTier = achState[ach.id] || 0; let currentVal = 0; if (ach.reqType === 'total_produced') currentVal = state.stats.totalProduced || 0; else if (ach.reqType === 'total_revenue') currentVal = state.lifetimeRevenue || 0; else if (ach.reqType === 'contracts_completed') currentVal = state.stats.contractsCompleted || 0; else if (ach.reqType === 'ipo_count') currentVal = state.ipoCount || 0; else if (ach.reqType === 'managers_hired') currentVal = state.stats.managersHired || 0; const maxTier = ach.thresholds.length; const isMaxed = currentTier >= maxTier; const nextThreshold = !isMaxed ? ach.thresholds[currentTier] : ach.thresholds[maxTier - 1]; const progressPct = isMaxed ? 100 : Math.min(100, Math.floor((currentVal / nextThreshold) * 100)); const elFill = document.getElementById(`ach-fill-${ach.id}`); if (elFill) elFill.style.width = `${progressPct}%`; const elCurr = document.getElementById(`ach-curr-val-${ach.id}`); if (elCurr) elCurr.textContent = ach.reqType === 'total_revenue' ? fmtCurrency(currentVal) : fmtNum(currentVal, 0); const elTier = document.getElementById(`ach-tier-${ach.id}`); if (elTier) elTier.textContent = `Tier ${currentTier} / ${maxTier}`; const elIcon = document.getElementById(`ach-icon-${ach.id}`); if (elIcon) elIcon.classList.toggle('ach-unlocked', currentTier > 0); } }