/* ══════════════════════════════════════════════════════════════════
   ATLAS COCKPIT — BRIEFS
   Read-only surface over state.briefs (written by external generators).
   A sidebar view + a "Latest brief" card pinned to Today's rail.
   ══════════════════════════════════════════════════════════════════ */

const BRIEF_KIND = { friday: 'Friday', monday: 'Monday', custom: 'Custom' };

/* Briefs sorted newest-first. */
function briefList() {
  const briefs = Store.get().briefs || {};
  return Object.entries(briefs)
    .map(([id, b]) => ({ id, ...b }))
    .sort((a, b) => String(b.createdAt).localeCompare(String(a.createdAt)));
}
function briefPreview(md) {
  const line = String(md || '').split('\n').map(l => l.trim())
    .find(l => l && !l.startsWith('#') && !l.startsWith('##'));
  const text = (line || '').replace(/[*_`#]/g, '').trim();
  return text.length > 96 ? text.slice(0, 94) + '\u2026' : text;
}

/* Minimal markdown → React (headings, bold, ordered/unordered lists, paragraphs). */
function renderInline(text, keyBase) {
  const parts = String(text).split(/(\*\*[^*]+\*\*)/g).filter(Boolean);
  return parts.map((p, i) => p.startsWith('**') && p.endsWith('**')
    ? React.createElement('strong', { key: keyBase + '-' + i }, p.slice(2, -2))
    : p);
}
function Markdown({ md }) {
  const lines = String(md || '').split('\n');
  const out = []; let list = null; let listType = null; let key = 0;
  const flush = () => { if (list) { out.push(React.createElement(listType === 'ol' ? 'ol' : 'ul', { key: 'l' + (key++), className: 'md-list' }, list)); list = null; listType = null; } };
  lines.forEach((raw) => {
    const line = raw.trim();
    if (!line) { flush(); return; }
    if (line.startsWith('### ')) { flush(); out.push(React.createElement('h4', { key: key++, className: 'md-h4' }, renderInline(line.slice(4), 'h' + key))); return; }
    if (line.startsWith('## ')) { flush(); out.push(React.createElement('h3', { key: key++, className: 'md-h3' }, renderInline(line.slice(3), 'h' + key))); return; }
    if (line.startsWith('# ')) { flush(); out.push(React.createElement('h2', { key: key++, className: 'md-h2' }, renderInline(line.slice(2), 'h' + key))); return; }
    const om = line.match(/^(\d+)\.\s+(.*)/);
    if (om) { if (listType !== 'ol') { flush(); list = []; listType = 'ol'; } list.push(React.createElement('li', { key: key++ }, renderInline(om[2], 'li' + key))); return; }
    if (line.startsWith('- ')) { if (listType !== 'ul') { flush(); list = []; listType = 'ul'; } list.push(React.createElement('li', { key: key++ }, renderInline(line.slice(2), 'li' + key))); return; }
    flush(); out.push(React.createElement('p', { key: key++, className: 'md-p' }, renderInline(line, 'p' + key)));
  });
  flush();
  return React.createElement('div', { className: 'md' }, out);
}

function BriefAge({ iso }) {
  return React.createElement('span', null, relTime(iso));
}

/* "Latest brief" card for the Today rail (pinned above BlockersRail). */
function LatestBriefCard() {
  useStore(s => s.briefs);
  const list = briefList();
  if (!list.length) {
    return React.createElement('div', { className: 'card mini' },
      React.createElement('div', { className: 'mini-head' },
        React.createElement(Icon, { name: 'doc', size: 15, style: { color: 'var(--accent)' } }),
        React.createElement('span', { className: 't' }, 'Latest brief')),
      React.createElement('div', { style: { fontSize: 12.5, color: 'var(--ink-muted)', padding: '6px 0', lineHeight: 1.5 } }, 'No briefs yet \u2014 Monday and Friday briefs will appear here.'));
  }
  const b = list[0];
  return React.createElement('div', { className: 'card mini brief-card' },
    React.createElement('div', { className: 'mini-head' },
      React.createElement(Icon, { name: 'doc', size: 15, style: { color: 'var(--accent)' } }),
      React.createElement('span', { className: 't' }, 'Latest brief'),
      React.createElement('span', { className: 'c' }, React.createElement('span', { className: 'brief-chip' }, BRIEF_KIND[b.kind] || 'Brief'))),
    React.createElement('div', { className: 'brief-age eyebrow' }, React.createElement(BriefAge, { iso: b.createdAt })),
    React.createElement('div', { className: 'brief-preview' }, briefPreview(b.markdown)),
    React.createElement('button', { className: 'btn sm', style: { marginTop: 10 }, onClick: () => openDrawer('brief', b.id) }, 'Read', React.createElement(Icon, { name: 'arrowR', size: 13, className: 'bico' })));
}

/* Briefs view — list all, newest-first. */
function BriefsView() {
  useStore(s => s.briefs);
  const list = briefList();
  return React.createElement('div', null,
    React.createElement('div', { className: 'page-head' },
      React.createElement('h1', { className: 'page-h1' }, 'Briefs'),
      React.createElement('p', { className: 'page-lead' }, 'Monday and Friday briefs, newest first. Generated by ATLAS; the dashboard reads them. Open any to read the full markdown.')),
    list.length === 0
      ? React.createElement(EmptyState, { icon: 'doc', title: 'No briefs yet', children: 'Monday and Friday briefs will appear here once the orchestrator starts writing them.' })
      : React.createElement('div', { className: 'card', style: { overflow: 'hidden' } },
          list.map(b => React.createElement('div', { key: b.id, className: 'brief-row' },
            React.createElement('div', { className: 'brief-row-main', onClick: () => openDrawer('brief', b.id) },
              React.createElement('div', { className: 'brief-row-top' },
                React.createElement('span', { className: 'brief-row-title' }, b.title),
                React.createElement('span', { className: cls('brief-chip', 'k-' + b.kind) }, BRIEF_KIND[b.kind] || 'Brief')),
              React.createElement('div', { className: 'brief-row-prev' }, briefPreview(b.markdown))),
            React.createElement('div', { className: 'brief-row-side' },
              React.createElement('span', { className: 'brief-row-age eyebrow' }, React.createElement(BriefAge, { iso: b.createdAt })),
              React.createElement('button', { className: 'icon-btn brief-dl', title: 'Download markdown', onClick: () => downloadFile(b.id + '.md', b.markdown, 'text/markdown') }, React.createElement(Icon, { name: 'download', size: 15 }))))))
  );
}

Object.assign(window, { BriefsView, LatestBriefCard, Markdown, BRIEF_KIND, briefList, briefPreview });
