// components/TierPanels/T2Panel.jsx
//
// T2 (Named Investor / Committed Partner) panel. Second curtain has been pulled.
// Adds: colony agent state, Pātaka query interface, sublation events ticker,
//       embodiment library browser.
// Inherits: T0 + T1.
//
// Wire-in: window.T2Panel = T2Panel

const { useState, useEffect } = React;

const COLONY_AGENTS = [
  'Alpha', 'Beta', 'Gamma', 'Delta',
  'Jester', 'Sigma/POUNAMU', 'Omega', 'Psi',
];

const EMBODIMENT_LIBRARY = [
  'Marcus Aurelius', 'Audre Lorde', 'Simone Weil', 'Frantz Fanon',
  'Te Whiti o Rongomai', 'Hannah Arendt', 'Wittgenstein', 'Socrates',
  'Whakapapa Kuia',
];

function T2Panel({ persistence, colonyStateEndpoint }) {
  const [agentState, setAgentState] = useState({});
  const [patakaQuery, setPatakaQuery] = useState('');
  const [patakaResults, setPatakaResults] = useState([]);
  const [sublationEvents, setSublationEvents] = useState([]);
  const [selectedEmbodiment, setSelectedEmbodiment] = useState(null);

  // Poll colony agent state
  useEffect(() => {
    if (!colonyStateEndpoint) {
      // Stub mock data per dispatch (Beta surfaces limitation to Sovereign for wire-up)
      setAgentState({
        Alpha: 'idle',
        Beta: 'running',
        Gamma: 'idle',
        Delta: 'idle',
        Jester: 'auditing',
        'Sigma/POUNAMU': 'idle',
        Omega: 'idle',
        Psi: 'idle',
      });
      return;
    }
    const refresh = () => {
      fetch(colonyStateEndpoint)
        .then(r => r.ok ? r.json() : {})
        .then(state => setAgentState(state))
        .catch(() => {});
    };
    refresh();
    const interval = setInterval(refresh, 5000);
    return () => clearInterval(interval);
  }, [colonyStateEndpoint]);

  // Subscribe to sublation events from persistence
  useEffect(() => {
    if (!persistence) return;
    const refresh = () => {
      const buffer = persistence.localBuffer || [];
      const subs = buffer.filter(r => r.receipt_subtype === 'sublation');
      setSublationEvents(subs.slice(-10).reverse());
    };
    refresh();
    const interval = setInterval(refresh, 2000);
    return () => clearInterval(interval);
  }, [persistence]);

  // Pātaka client-side search (stub per dispatch)
  const handlePatakaQuery = (e) => {
    e.preventDefault();
    if (!patakaQuery.trim()) return;
    // Stub: returns mocked Pātaka manifest results
    setPatakaResults([
      { domain: 'substrate', path: 'pataka/domains/substrate/architecture-v2.md',
        snippet: `Match for "${patakaQuery}" in substrate architecture document.` },
      { domain: 'kaitiaki', path: 'pataka/domains/kaitiaki/galbraith-review.md',
        snippet: `Match for "${patakaQuery}" in Kaitiaki Galbraith review.` },
    ]);
  };

  return React.createElement('aside', { className: 't2-panel' },
    React.createElement('header', { className: 't2-panel-header' },
      React.createElement('h3', null, 'T2. Named Investor / Committed Partner'),
      React.createElement('p', { className: 't2-panel-subtitle' },
        'Colony state visible. Substrate engineering decisions discussable.'
      )
    ),

    React.createElement('section', { className: 't2-section' },
      React.createElement('h4', null, 'Colony agent state (live)'),
      React.createElement('div', { className: 't2-agent-grid' },
        COLONY_AGENTS.map(agent => {
          const status = agentState[agent] || 'idle';
          return React.createElement('div', {
            key: agent,
            className: `t2-agent t2-agent-${status}`,
          },
            React.createElement('span', { className: 't2-agent-name' }, agent),
            React.createElement('span', { className: 't2-agent-status' }, status)
          );
        })
      )
    ),

    React.createElement('section', { className: 't2-section' },
      React.createElement('h4', null, 'Pātaka query'),
      React.createElement('form', {
        className: 't2-pataka-form',
        onSubmit: handlePatakaQuery,
      },
        React.createElement('input', {
          type: 'text',
          value: patakaQuery,
          onChange: (e) => setPatakaQuery(e.target.value),
          placeholder: 'Search the canonical Pātaka...',
        }),
        React.createElement('button', { type: 'submit' }, 'Query')
      ),
      patakaResults.length > 0 && React.createElement('ul', { className: 't2-pataka-results' },
        patakaResults.map((r, i) =>
          React.createElement('li', { key: i, className: 't2-pataka-result' },
            React.createElement('span', { className: 't2-pataka-domain' }, r.domain),
            React.createElement('span', { className: 't2-pataka-path' }, r.path),
            React.createElement('p', { className: 't2-pataka-snippet' }, r.snippet)
          )
        )
      ),
      React.createElement('p', { className: 't2-section-note' },
        'Note: client-side stub. Full Pātaka query Worker is a v2.0 deliverable.'
      )
    ),

    React.createElement('section', { className: 't2-section' },
      React.createElement('h4', null, 'Sublation events (live)'),
      sublationEvents.length === 0
        ? React.createElement('p', { className: 't2-empty' }, 'No sublations yet this session.')
        : React.createElement('ul', { className: 't2-sublation-ticker' },
            sublationEvents.map((s, i) =>
              React.createElement('li', { key: i },
                React.createElement('span', { className: 't2-sublation-time' },
                  new Date(s.timestamp).toLocaleTimeString()
                ),
                React.createElement('span', { className: 't2-sublation-content' },
                  s.summary || s.morpheme_id || 'sublation event'
                )
              )
            )
          )
    ),

    React.createElement('section', { className: 't2-section' },
      React.createElement('h4', null, 'Embodiment library (read-only)'),
      React.createElement('ul', { className: 't2-embodiment-list' },
        EMBODIMENT_LIBRARY.map(name =>
          React.createElement('li', {
            key: name,
            className: 't2-embodiment' + (selectedEmbodiment === name ? ' selected' : ''),
            onClick: () => setSelectedEmbodiment(selectedEmbodiment === name ? null : name),
          }, name)
        )
      ),
      selectedEmbodiment && React.createElement('div', { className: 't2-embodiment-detail' },
        React.createElement('p', null,
          `${selectedEmbodiment} embodiment Morpheme available to DM Morphy. Constitution stack: substrate floor + character voice + primary source citation requirement.`
        )
      )
    )
  );
}

window.T2Panel = T2Panel;
