/**
 * Self-service Setup-Checkliste — soll neue Kunden ohne Support-Kontakt durch die
 * Ersteinrichtung führen. Jeder Schritt verlinkt auf die zuständige Seite und zeigt,
 * wo möglich, den aktuellen Live-Status (Lizenz, Geräte, Schwellwerte, Wochenreport).
 */

function stepBadge(state) {
  if (state === 'ok') return '<span class="pill ok">Erledigt</span>';
  if (state === 'warn') return '<span class="pill warn">Optional</span>';
  if (state === 'admin') return '<span class="pill muted-pill">Nur Administrator</span>';
  return '<span class="pill">Offen</span>';
}

function stepItem(step) {
  const linkHtml = step.href
    ? `<a href="${step.href}" class="btn-primary" style="text-decoration:none;">${escapeHtml(step.linkLabel || 'Öffnen')}</a>`
    : `<span class="muted">${escapeHtml(step.linkLabel || '')}</span>`;
  return `<li style="align-items:flex-start;flex-wrap:wrap;">
    <div style="flex:1;min-width:240px;">
      <div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;">
        <strong>${escapeHtml(step.title)}</strong>
        ${stepBadge(step.state)}
      </div>
      <p class="muted" style="margin:4px 0 0;">${escapeHtml(step.description)}</p>
    </div>
    <div style="flex:0 0 auto;">${linkHtml}</div>
  </li>`;
}

function render(steps) {
  document.getElementById('setupSteps').innerHTML = steps.map(stepItem).join('');
}

async function buildSteps(me) {
  const isAdmin = me?.role === 'Administrator';
  const license = me?.license || {};

  const steps = [
    {
      title: '1 · Lizenz oder Testversion prüfen',
      description: license.isLicensed
        ? (license.isTrial ? `Testversion aktiv${license.trialDaysRemaining != null ? ' · noch ' + license.trialDaysRemaining + ' Tage' : ''}.` : 'Enterprise-Lizenz aktiviert.')
        : 'Lizenz inaktiv — Ansicht möglich, Aktionen gesperrt.',
      state: license.isLicensed ? (license.isTrial ? 'warn' : 'ok') : 'todo',
      href: '/license.html',
      linkLabel: 'Lizenzmanager'
    },
    {
      title: '2 · Enrollment-Token für Agents holen',
      description: isAdmin
        ? 'Jeder Agent benötigt Server-URL + Enrollment-Token aus den Einstellungen.'
        : 'Der Enrollment-Token wird vom Administrator unter Einstellungen verwaltet.',
      state: isAdmin ? 'todo' : 'admin',
      href: isAdmin ? '/settings.html' : null,
      linkLabel: 'Einstellungen'
    },
    {
      title: '3 · Agent auf den PCs installieren',
      description: 'SensorPulse.Enterprise.Agent auf jedem zu überwachenden PC installieren und mit Server-URL + Token verbinden.',
      state: 'todo',
      href: null,
      linkLabel: 'Siehe Handbuch'
    },
    {
      title: '4 · Erstes Gerät prüfen',
      description: me?.deviceCount ? `${me.deviceCount} Gerät(e) in der Fleet registriert.` : 'Noch kein Gerät gemeldet — nach der Installation erscheint es automatisch.',
      state: me?.deviceCount ? 'ok' : 'todo',
      href: '/',
      linkLabel: 'Fleet öffnen'
    },
    {
      title: '5 · SMTP für E-Mail-Alarme (optional)',
      description: 'Ermöglicht E-Mail-Benachrichtigungen bei Ausfällen und den Wochenreport.',
      state: isAdmin ? (me?.smtpEnabled ? 'ok' : 'warn') : 'admin',
      href: isAdmin ? '/settings.html' : null,
      linkLabel: 'Einstellungen'
    },
    {
      title: '6 · Schwellwerte festlegen',
      description: me?.thresholdsEnabled ? 'Schwellwert-Alarme sind aktiv (CPU/Temperatur/Disk).' : 'CPU-, Temperatur- und Disk-Grenzwerte für automatische Warnungen konfigurieren.',
      state: me?.thresholdsEnabled ? 'ok' : 'todo',
      href: '/alerts.html',
      linkLabel: 'Alerts öffnen'
    },
    {
      title: '7 · Wochenreport aktivieren',
      description: isAdmin
        ? (me?.weeklyReportEnabled ? 'Wochenreport ist aktiv.' : 'Automatische E-Mail-Zusammenfassung der Flotte einrichten.')
        : 'Der Wochenreport wird vom Administrator unter Reports verwaltet.',
      state: isAdmin ? (me?.weeklyReportEnabled ? 'ok' : 'warn') : 'admin',
      href: '/reports.html',
      linkLabel: 'Reports öffnen'
    }
  ];

  render(steps);
}

async function loadLiveStatus() {
  const status = {};
  try {
    const res = await api('/api/fleet');
    if (res.ok) {
      const data = await res.json();
      status.deviceCount = data.overview?.totalDevices ?? 0;
    }
  } catch (_) { /* ignore */ }

  try {
    const res = await api('/api/alerts/thresholds');
    if (res.ok) {
      const t = await res.json();
      status.thresholdsEnabled = !!t.enabled;
    }
  } catch (_) { /* ignore */ }

  try {
    const res = await api('/api/settings/smtp');
    if (res.ok) {
      const s = await res.json();
      status.smtpEnabled = !!s.enabled;
    }
  } catch (_) { /* ignore, e.g. Viewer/Operator without AdminOnly rights */ }

  try {
    const res = await api('/api/reports/weekly/settings');
    if (res.ok) {
      const s = await res.json();
      status.weeklyReportEnabled = !!s.enabled;
    }
  } catch (_) { /* ignore, e.g. Viewer/Operator without AdminOnly rights */ }

  return status;
}

async function init() {
  await initLocale();
  const nav = document.getElementById('mainNav');
  if (nav) nav.innerHTML = chromeNav('setup');
  document.getElementById('btnLogout').addEventListener('click', logout);

  let me = null;
  try {
    me = await loadMe();
    if (me?.organizationName) document.getElementById('orgName').textContent = me.organizationName;
    if (me?.license) renderLicenseBanner(me.license);
    if (me?.role) applyRoleNav(me.role);
  } catch (_) { /* redirect handled in api() */ }

  const status = await loadLiveStatus();
  await buildSteps({ ...me, ...status });
}

init();
