// Mythic Oracle — campaign management view import { getCampaigns, createCampaign, deleteCampaign, getSystems } from './api.js'; import { setActiveCampaign, getActiveCampaign } from './app.js'; const container = document.getElementById('view-campaign-management'); let campaignsCache = []; let systemsCache = []; function escapeHtml(value) { const div = document.createElement('div'); div.textContent = value; return div.innerHTML; } function campaignItemHtml(campaign) { const active = getActiveCampaign(); const isActive = Boolean(active) && active.id === campaign.id; return `
  • `; } function render() { const systemOptions = systemsCache .map((system) => ``) .join(''); const campaignItems = campaignsCache.length ? campaignsCache.map(campaignItemHtml).join('') : '
  • No campaigns yet — create one below to get started.
  • '; container.innerHTML = `

    Campaign Management

    `; } async function loadAndRender() { [campaignsCache, systemsCache] = await Promise.all([getCampaigns(), getSystems()]); render(); } function bindEvents() { container.addEventListener('submit', async (event) => { if (event.target.id !== 'createCampaignForm') return; event.preventDefault(); const nameInput = document.getElementById('campaignNameInput'); const systemSelect = document.getElementById('campaignSystemSelect'); const name = nameInput.value.trim(); const systemId = Number(systemSelect.value); if (!name || !systemId) return; const campaign = await createCampaign({ name, system_id: systemId }); await setActiveCampaign(campaign); await loadAndRender(); }); container.addEventListener('click', async (event) => { const selectBtn = event.target.closest('.campaign-select'); if (selectBtn) { const id = Number(selectBtn.dataset.id); const campaign = campaignsCache.find((c) => c.id === id); if (campaign) { await setActiveCampaign(campaign); render(); } return; } const deleteBtn = event.target.closest('.campaign-delete'); if (deleteBtn) { const id = Number(deleteBtn.dataset.id); const campaign = campaignsCache.find((c) => c.id === id); if (!campaign) return; const confirmed = confirm( `Delete "${campaign.name}"? This permanently removes all of its threads, NPCs, notes, and character data.` ); if (!confirmed) return; await deleteCampaign(id); if (getActiveCampaign()?.id === id) { await setActiveCampaign(null); } await loadAndRender(); } }); } function init() { bindEvents(); loadAndRender(); } document.addEventListener('DOMContentLoaded', init);