/* global React, DATA, Panel, mdToHtml, fmtSAR, fmtN, fmtPct */
const Briefing = () => {
const desks = ['Network', 'Domestic', 'International', 'Umrah'];
const [desk, setDesk] = useState('Network');
const [data, setData] = useState(null);
const [loading, setLoading] = useState(false);
const [err, setErr] = useState(null);
const run = async (d) => {
setLoading(true); setErr(null); setData(null);
try {
const base = (window.API_BASE_URL || '');
const res = await fetch(base + '/api/briefing', { method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ desk: d }) });
if (!res.ok) throw new Error('HTTP ' + res.status);
setData(await res.json());
} catch (e) { setErr(e.message); } finally { setLoading(false); }
};
useEffect(() => { run('Network'); }, []);
const ctx = data && data.context;
const cur = ctx && ctx.performance_last7_vs_prev7 && ctx.performance_last7_vs_prev7.cur;
const fwd = ctx && ctx.forward_30d;
return React.createElement('div', { className: 'page' },
React.createElement('div', { className: 'page-head' },
React.createElement('div', { className: 'eyebrow', style: { marginBottom: 8 } }, 'Daily RM Briefing · C2'),
React.createElement('h1', { className: 'headline', style: { fontSize: 46 } }, 'The desk\'s ', React.createElement('em', null, 'morning read.')),
React.createElement('div', { className: 'subhead' }, 'A one-page briefing generated each morning per desk: what changed, why, what competitors did, what the agent recommends, and what needs human judgement today.')),
React.createElement('div', { className: 'row between', style: { marginBottom: 16, flexWrap: 'wrap', gap: 8 } },
React.createElement('div', { className: 'filterbar' },
desks.map(d => React.createElement('button', { key: d, className: 'filter-chip' + (desk === d ? ' active' : ''),
onClick: () => { setDesk(d); run(d); } }, d, ' desk'))),
React.createElement('button', { className: 'btn btn-sm btn-primary', onClick: () => run(desk), disabled: loading },
loading ? 'Generating…' : '↻ Regenerate')),
React.createElement('div', { className: 'grid gap-3', style: { gridTemplateColumns: '1.5fr 1fr' } },
React.createElement(Panel, { title: `${desk} desk briefing`, sub: data ? `As of ${data.as_of} · Anthropic Claude` : 'loading…' },
loading ? React.createElement('div', { style: { padding: 24, color: 'var(--text-muted)', fontStyle: 'italic' } }, '· · · the briefing writer is reading the overnight book')
: err ? React.createElement('div', { className: 'text-neg', style: { padding: 16 } }, 'Could not generate briefing: ' + err)
: data ? React.createElement('div', { className: 'article-col', style: { maxWidth: 'none', fontSize: 18.5, lineHeight: 1.6 }, dangerouslySetInnerHTML: { __html: mdToHtml(data.markdown) } })
: null),
React.createElement('div', { className: 'grid gap-2' },
cur ? React.createElement(Panel, { title: 'Fact-pack', sub: 'Deterministic inputs behind the narrative' },
React.createElement('div', { className: 'grid grid-2 gap-2' },
React.createElement(MiniStat, { label: 'Rev · last 7d', value: fmtSAR(cur.rev) }),
React.createElement(MiniStat, { label: 'LF · last 7d', value: fmtPct(cur.lf) }),
fwd ? React.createElement(MiniStat, { label: 'Fwd rev · 30d', value: fmtSAR(fwd.frev) }) : null,
fwd ? React.createElement(MiniStat, { label: 'YoY · fwd', value: fwd.yoy != null ? fwd.yoy + '%' : '—' }) : null)) : null,
ctx && ctx.tight_ods_21d && ctx.tight_ods_21d.length ? React.createElement(Panel, { title: 'Tightest O&Ds · 21d', flush: true },
React.createElement('table', { className: 'tbl' }, React.createElement('tbody', null,
ctx.tight_ods_21d.map((r, i) => React.createElement('tr', { key: i },
React.createElement('td', { style: { fontWeight: 600 } }, r.od),
React.createElement('td', { className: 'text-muted' }, r.market),
React.createElement('td', { className: 'num mono text-pos' }, fmtPct(r.lf))))))) : null,
ctx && ctx.competitor_undercuts && ctx.competitor_undercuts.length ? React.createElement(Panel, { title: 'Competitor undercuts', flush: true },
React.createElement('table', { className: 'tbl' }, React.createElement('tbody', null,
ctx.competitor_undercuts.slice(0, 5).map((r, i) => React.createElement('tr', { key: i },
React.createElement('td', { style: { fontWeight: 600 } }, r.od),
React.createElement('td', null, React.createElement('span', { className: 'pill pill-info' }, r.carrier)),
React.createElement('td', { className: 'num mono text-neg' }, r.gap_pct + '%')))))) : null)));
};
const MiniStat = ({ label, value }) => React.createElement('div', { className: 'boxed', style: { padding: '10px 12px' } },
React.createElement('div', { className: 'label', style: { marginBottom: 3 } }, label),
React.createElement('div', { className: 'mono', style: { fontSize: 16, fontWeight: 600 } }, value));
window.Briefing = Briefing;
window.MiniStat = MiniStat;