/* ══════════════════════════════════════════════════════════════════
   ATLAS COCKPIT — CAPTURE FORMS + EOD PROMPT
   Add-action, add-idea, and the end-of-day wrap. All write to the
   mutable store collections and append to the decision log.
   ══════════════════════════════════════════════════════════════════ */

/* Generic centered form modal — reuses the command-palette scrim styling. */
function FormModal({ title, sub, onClose, children, footer, width = 520 }) {
  useEffect(() => {
    const onKey = (e) => { if (e.key === 'Escape') onClose(); };
    window.addEventListener('keydown', onKey);
    return () => window.removeEventListener('keydown', onKey);
  }, []);
  return React.createElement('div', { className: 'cmd-scrim show', onMouseDown: e => { if (e.target === e.currentTarget) onClose(); } },
    React.createElement('div', { className: 'form-modal', role: 'dialog', 'aria-label': title, style: { width: `min(${width}px, 94vw)` } },
      React.createElement('div', { className: 'fm-head' },
        React.createElement('div', null,
          React.createElement('div', { className: 'fm-title' }, title),
          sub && React.createElement('div', { className: 'fm-sub' }, sub)),
        React.createElement('button', { className: 'icon-btn', onClick: onClose, 'aria-label': 'Close' }, React.createElement(Icon, { name: 'x', size: 16 }))),
      React.createElement('div', { className: 'fm-body scroll' }, children),
      footer && React.createElement('div', { className: 'fm-foot' }, footer))
  );
}

function FormField({ label, hint, children }) {
  return React.createElement('div', { className: 'ff' },
    React.createElement('label', { className: 'field-label' }, label, hint && React.createElement('span', { className: 'ff-hint' }, hint)),
    children);
}

function Segmented({ value, options, onChange }) {
  return React.createElement('div', { className: 'seg' },
    options.map(([v, l]) => React.createElement('button', { key: v, type: 'button', className: value === v ? 'on' : '', onClick: () => onChange(v) }, l)));
}

/* ───────────────────────────  ADD ACTION  ───────────────────────── */
function AddActionForm({ projectId, onClose }) {
  const D = window.ATLAS_DATA;
  const [title, setTitle] = useState('');
  const [priority, setPriority] = useState('med');
  const [due, setDue] = useState('');
  const [checklist, setChecklist] = useState('');
  const [notes, setNotes] = useState('');
  const [proj, setProj] = useState(projectId || '');
  const titleRef = useRef(null);
  useEffect(() => { setTimeout(() => titleRef.current && titleRef.current.focus(), 40); }, []);

  const submit = () => {
    if (!title.trim()) { toast('Add a title first'); titleRef.current && titleRef.current.focus(); return; }
    addAction({ title, priority, due: due || null, checklist, notes, projectId: proj || null });
    onClose();
  };
  const projName = projectId ? (D.projects.find(p => p.id === projectId) || {}).name : null;

  return React.createElement(FormModal, {
    title: 'New action', sub: projName ? 'On ' + projName : 'Adds to today\u2019s queue', onClose,
    footer: React.createElement(React.Fragment, null,
      React.createElement('button', { className: 'btn', onClick: onClose }, 'Cancel'),
      React.createElement('button', { className: 'btn primary', onClick: submit }, React.createElement(Icon, { name: 'plus', size: 14, className: 'bico' }), 'Add action'))
  },
    React.createElement(FormField, { label: 'Title', hint: 'required' },
      React.createElement('input', { ref: titleRef, className: 'field', value: title, placeholder: 'What needs deciding or doing?', onChange: e => setTitle(e.target.value), onKeyDown: e => { if (e.key === 'Enter') submit(); } })),
    React.createElement('div', { className: 'ff-grid' },
      React.createElement(FormField, { label: 'Priority' }, React.createElement(Segmented, { value: priority, options: [['low', 'Low'], ['med', 'Med'], ['high', 'High']], onChange: setPriority })),
      React.createElement(FormField, { label: 'Due', hint: 'optional' }, React.createElement('input', { type: 'date', className: 'field', value: due, onChange: e => setDue(e.target.value) }))),
    !projectId && React.createElement(FormField, { label: 'Project', hint: 'optional' },
      React.createElement('select', { className: 'field', value: proj, onChange: e => setProj(e.target.value) },
        React.createElement('option', { value: '' }, 'No project'),
        D.projects.map(p => React.createElement('option', { key: p.id, value: p.id }, p.name)))),
    React.createElement(FormField, { label: 'Checklist', hint: 'one item per line, optional' },
      React.createElement('textarea', { className: 'field', rows: 3, value: checklist, placeholder: 'First step\nSecond step', onChange: e => setChecklist(e.target.value) })),
    React.createElement(FormField, { label: 'Notes', hint: 'optional' },
      React.createElement('textarea', { className: 'field', rows: 2, value: notes, placeholder: 'Context, links, where credentials live\u2026', onChange: e => setNotes(e.target.value) }))
  );
}

/* ───────────────────────────  ADD IDEA  ─────────────────────────── */
function AddIdeaForm({ onClose }) {
  const cats = [...new Set(getIdeas().map(i => i.category).filter(Boolean))];
  const [title, setTitle] = useState('');
  const [category, setCategory] = useState('');
  const [score, setScore] = useState(5);
  const [ttr, setTtr] = useState('');
  const [ceiling, setCeiling] = useState('');
  const [notes, setNotes] = useState('');
  const titleRef = useRef(null);
  useEffect(() => { setTimeout(() => titleRef.current && titleRef.current.focus(), 40); }, []);

  const submit = () => {
    if (!title.trim()) { toast('Add a title first'); titleRef.current && titleRef.current.focus(); return; }
    addIdea({ title, category, score, timeToRevenue: ttr, ceiling, notes });
    onClose();
  };
  return React.createElement(FormModal, {
    title: 'New idea', sub: 'Adds to the venture queue', onClose,
    footer: React.createElement(React.Fragment, null,
      React.createElement('button', { className: 'btn', onClick: onClose }, 'Cancel'),
      React.createElement('button', { className: 'btn primary', onClick: submit }, React.createElement(Icon, { name: 'plus', size: 14, className: 'bico' }), 'Capture idea'))
  },
    React.createElement(FormField, { label: 'Title', hint: 'required' },
      React.createElement('input', { ref: titleRef, className: 'field', value: title, placeholder: 'The one-line pitch', onChange: e => setTitle(e.target.value) })),
    React.createElement('div', { className: 'ff-grid' },
      React.createElement(FormField, { label: 'Category', hint: 'pick or type' },
        React.createElement('input', { className: 'field', list: 'idea-cats', value: category, placeholder: 'e.g. service-productized', onChange: e => setCategory(e.target.value) }),
        React.createElement('datalist', { id: 'idea-cats' }, cats.map(c => React.createElement('option', { key: c, value: c })))),
      React.createElement(FormField, { label: 'Score', hint: String(score) + ' / 10' },
        React.createElement('input', { type: 'range', className: 'range', min: 1, max: 10, step: 1, value: score, onChange: e => setScore(Number(e.target.value)) }))),
    React.createElement('div', { className: 'ff-grid' },
      React.createElement(FormField, { label: 'Time to revenue', hint: 'optional' }, React.createElement('input', { className: 'field', value: ttr, placeholder: 'e.g. 30 days', onChange: e => setTtr(e.target.value) })),
      React.createElement(FormField, { label: 'Ceiling', hint: 'optional' }, React.createElement('input', { className: 'field', value: ceiling, placeholder: 'e.g. $50k MRR', onChange: e => setCeiling(e.target.value) }))),
    React.createElement(FormField, { label: 'Thesis / notes', hint: 'optional' },
      React.createElement('textarea', { className: 'field', rows: 3, value: notes, placeholder: 'Why this could work\u2026', onChange: e => setNotes(e.target.value) }))
  );
}

/* ─────────────────────────────  EOD  ────────────────────────────── */
const eodBus = new Set();
function openEod() { eodBus.forEach(fn => fn(true)); }

/* True if any eod_* entry was logged today. */
function eodDoneToday() {
  const today = isoDay();
  return (Store.get().log || []).some(e => String(e.kind || '').startsWith('eod_') && String(e.ts || '').slice(0, 10) === today);
}

function EodModal({ onClose }) {
  const [shipped, setShipped] = useState('');
  const [stalled, setStalled] = useState('');
  const [tomorrow, setTomorrow] = useState('');
  const submit = () => {
    const lines = (t) => t.split('\n').map(l => l.trim()).filter(Boolean);
    let n = 0;
    lines(shipped).forEach(text => { logEvent('eod_shipped', { store: 'eod', title: text }); n++; });
    lines(stalled).forEach(text => { logEvent('eod_stalled', { store: 'eod', title: text }); n++; });
    if (tomorrow.trim()) { logEvent('eod_tomorrow', { store: 'eod', title: tomorrow.trim() }); n++; }
    if (n === 0) { toast('Nothing to log \u2014 add a line first'); return; }
    toast(`Day wrapped \u2014 ${n} logged`);
    onClose();
  };
  return React.createElement(FormModal, {
    title: 'End of day', sub: 'Three quick fields. Each line becomes a log entry.', onClose, width: 540,
    footer: React.createElement(React.Fragment, null,
      React.createElement('button', { className: 'btn', onClick: onClose }, 'Cancel'),
      React.createElement('button', { className: 'btn primary', onClick: submit }, React.createElement(Icon, { name: 'check', size: 14, className: 'bico' }), 'Log the day'))
  },
    React.createElement(FormField, { label: 'Shipped today', hint: 'one item per line' },
      React.createElement('textarea', { className: 'field', rows: 3, value: shipped, placeholder: 'Connector spec locked\nAdaptwise domain shortlisted', onChange: e => setShipped(e.target.value) })),
    React.createElement(FormField, { label: 'Stalled / blocked', hint: 'one item per line' },
      React.createElement('textarea', { className: 'field', rows: 2, value: stalled, placeholder: 'Waiting on Stripe live confirm', onChange: e => setStalled(e.target.value) })),
    React.createElement(FormField, { label: 'Tomorrow\u2019s first move', hint: 'single line' },
      React.createElement('input', { className: 'field', value: tomorrow, placeholder: 'Buy the domain and provision email', onChange: e => setTomorrow(e.target.value) }))
  );
}

function EodModalHost() {
  const [open, setOpen] = useState(false);
  useEffect(() => { const fn = (v) => setOpen(v); eodBus.add(fn); return () => eodBus.delete(fn); }, []);
  if (!open) return null;
  return React.createElement(EodModal, { onClose: () => setOpen(false) });
}

/* Add-action bus — lets the project tile and drawer header open the form globally. */
const addActionBus = new Set();
function openAddAction(projectId) { addActionBus.forEach(fn => fn({ projectId: projectId || null })); }
function AddActionHost() {
  const [cur, setCur] = useState(null);
  useEffect(() => { const fn = (v) => setCur(v); addActionBus.add(fn); return () => addActionBus.delete(fn); }, []);
  if (!cur) return null;
  return React.createElement(AddActionForm, { projectId: cur.projectId, onClose: () => setCur(null) });
}

/* Non-blocking nudge shown atop Today after 5pm when EOD isn't done. */
function EodNudge() {
  const log = useStore(s => s.log);
  const [dismissed, setDismissed] = useState(() => sessionStorage.getItem('atlas-eod-nudge') === isoDay());
  const hour = new Date().getHours();
  if (dismissed || hour < 17 || eodDoneToday()) return null;
  const close = () => { sessionStorage.setItem('atlas-eod-nudge', isoDay()); setDismissed(true); };
  return React.createElement('div', { className: 'eod-nudge' },
    React.createElement(Icon, { name: 'moon2', size: 16, className: 'en-ico' }),
    React.createElement('span', { className: 'en-text' }, 'Wrap the day in 2 minutes'),
    React.createElement('div', { className: 'en-sp' }),
    React.createElement('button', { className: 'btn sm primary', onClick: openEod }, 'End day'),
    React.createElement('button', { className: 'icon-btn en-x', onClick: close, 'aria-label': 'Dismiss' }, React.createElement(Icon, { name: 'x', size: 14 }))
  );
}

Object.assign(window, { FormModal, FormField, AddActionForm, AddIdeaForm, openEod, EodModal, EodModalHost, EodNudge, eodDoneToday, openAddAction, AddActionHost });
