/* global React, Icon, Pill, fmt,
   BlockCard, Punch, BigStat, TEAM */
const { useState: useStateTr, useEffect: useEffectTr, useMemo: useMemoTr } = React;

/* ============================================================
   TRANSCRIPTIONS · All Hands + reuniões com clientes
   ----
   Cole a transcrição (Meet, Zoom, gravação) e o Claude extrai
   automaticamente: resumo, decisões, ações com responsável,
   itens pra mural, próximos passos.
   ============================================================ */

const TRANSCRIPT_LS_KEY = 'beza_transcripts_v1';

function loadTranscripts() {
  try { return JSON.parse(localStorage.getItem(TRANSCRIPT_LS_KEY) || '[]'); } catch { return []; }
}
function saveTranscripts(arr) {
  try { localStorage.setItem(TRANSCRIPT_LS_KEY, JSON.stringify(arr)); } catch (e) {}
}

/* Histórico mock pra demonstrar */
const MOCK_HISTORY = [
  { id: 't1', kind: 'all-hands', date: '11 de maio', client: null, durationMin: 38, processedAt: 'há 4 dias' },
  { id: 't2', kind: 'cliente',   date: '08 de maio', client: 'Soldado de Deus', contact: 'Robert L. Grier', durationMin: 42, processedAt: 'há 7 dias' },
  { id: 't3', kind: 'cliente',   date: '06 de maio', client: 'Áurea Clínica',   contact: 'Dra. Renata',     durationMin: 28, processedAt: 'há 9 dias' },
  { id: 't4', kind: 'all-hands', date: '04 de maio', client: null, durationMin: 45, processedAt: 'há 11 dias' },
  { id: 't5', kind: 'cliente',   date: '02 de maio', client: 'Wanderson Braga', contact: 'Wanderson',        durationMin: 35, processedAt: 'há 13 dias' },
];

function SectionTranscriptions() {
  const [tab, setTab] = useStateTr('upload');
  const [kind, setKind] = useStateTr('all-hands');
  const [client, setClient] = useStateTr('');
  const [date, setDate] = useStateTr(new Date().toISOString().slice(0,10));
  const [transcript, setTranscript] = useStateTr('');
  const [result, setResult] = useStateTr(null);
  const [processing, setProcessing] = useStateTr(false);

  const processTranscript = (e) => {
    e?.preventDefault();
    if (!transcript.trim()) return;
    setProcessing(true);
    // Simula chamada ao Claude pra extrair dados
    setTimeout(() => {
      setResult({
        kind,
        client: client || null,
        date,
        durationEstimate: Math.max(5, Math.round(transcript.split(/\s+/).length / 150)),
        summary: kind === 'all-hands'
          ? 'A semana teve um bom equilíbrio. Brady puxou o início do mês, Reinaldy sinalizou sobrecarga, decidimos antecipar entregas do Soldado pra dia 18. Possmozer USA confirmado pra começar dia 20.'
          : `Reunião com ${client || 'cliente'}. Cliente sinalizou interesse em ampliar escopo. Definimos próximos passos pra junho, alinhamos prazos e tipos de entrega.`,
        decisions: kind === 'all-hands' ? [
          { text: 'Brady · prioridade #1 da semana, Lucas dedica 3 dias completos', who: 'lucas' },
          { text: 'Banner do Pr. Anderson migra do Reinaldy pro Lucas (alivia Wanderson)', who: 'reinaldy' },
          { text: 'Entrega do Soldado adiantada pra dia 18 (em vez de 25)', who: 'grazi' },
        ] : [
          { text: 'Aprovado o aumento do escopo · +2 Reels/mês a partir de junho', who: null },
          { text: 'Sessão de fotos remarcada pra dia 22', who: null },
        ],
        actions: kind === 'all-hands' ? [
          { text: 'Grazi revisar copy dos 4 carrosseis do Wanderson',         who: 'grazi',    due: 14 },
          { text: 'Reinaldy entregar 6 dos 12 carrosseis tirinha',            who: 'reinaldy', due: 16 },
          { text: 'Lucas finalizar 10 reels do Brady',                        who: 'lucas',    due: 15 },
          { text: 'Reunião Possmozer USA marcada pra quarta 16h',             who: null,       due: 14 },
        ] : [
          { text: 'Enviar contrato atualizado do escopo expandido',           who: 'luan', due: 18 },
          { text: 'Reagendar sessão de fotos com a equipe',                   who: 'grazi', due: 16 },
          { text: 'Atualizar a ficha CRM com novas entregas mensais',         who: 'grazi', due: 14 },
        ],
        announcements: kind === 'all-hands' ? [
          { tone: 'success', text: 'Possmozer USA fechou contrato · onboarding dia 20' },
          { tone: 'warning', text: 'Café Graviola pausou contrato por 60 dias' },
          { tone: 'success', text: 'Soldado de Deus aprovou abril em 2 dias (recorde)' },
        ] : [],
        keyTopics: kind === 'all-hands' ? ['carga do time', 'priorização brady', 'redistribuição de banner', 'novo cliente possmozer']
                                        : ['expansão de escopo', 'novos prazos', 'fotos remarcadas'],
      });
      setProcessing(false);
    }, 1800);
  };

  const saveResult = () => {
    if (!result) return;
    const entry = {
      id: 'tr-' + Date.now(),
      ...result,
      transcript,
      savedAt: new Date().toISOString(),
    };
    const all = loadTranscripts();
    saveTranscripts([entry, ...all]);
    alert('Transcrição processada e salva.\n\n' +
      (result.kind === 'all-hands'
        ? 'Decisões e ações foram adicionadas ao mural da All Hands.'
        : `Adicionado ao CRM do ${result.client || 'cliente'}, aba Histórico.`));
    setTranscript(''); setResult(null); setClient('');
  };

  const subtabs = [
    { id: 'upload',  label: '✨ Processar nova' },
    { id: 'history', label: 'Histórico' },
  ];

  return (
    <div>
      <BlockCard kicker="✨ automação editorial" title="**Transcrições** de reuniões">
        <p style={{ margin: '0 0 18px', fontSize: 14, color: 'var(--text-muted)', maxWidth: 720, lineHeight: 1.6 }}>
          Cole a transcrição da All Hands ou de uma reunião com cliente. O Claude organiza em decisões, ações com prazo, avisos e atualiza automaticamente a Pauta ou o CRM.
        </p>

        <div style={{
          display: 'inline-flex', gap: 4, padding: 4,
          background: 'var(--surface)', border: '1px solid var(--border)',
          borderRadius: 'var(--r-pill)', marginBottom: 18,
        }}>
          {subtabs.map(s => {
            const active = tab === s.id;
            return (
              <button key={s.id} onClick={() => setTab(s.id)} style={{
                appearance: 'none', border: 'none',
                background: active ? 'var(--accent)' : 'transparent',
                color: active ? '#fff' : 'var(--text-muted)',
                padding: '7px 14px', fontSize: 12,
                fontWeight: active ? 500 : 400,
                borderRadius: 'var(--r-pill)', cursor: 'pointer',
                fontFamily: 'inherit',
              }}>{s.label}</button>
            );
          })}
        </div>

        {tab === 'upload' ? (
          <UploadView
            kind={kind} setKind={setKind}
            client={client} setClient={setClient}
            date={date} setDate={setDate}
            transcript={transcript} setTranscript={setTranscript}
            result={result} processing={processing}
            onProcess={processTranscript}
            onSave={saveResult}
            onDiscard={() => setResult(null)}
          />
        ) : (
          <HistoryView />
        )}
      </BlockCard>
    </div>
  );
}

function UploadView({ kind, setKind, client, setClient, date, setDate, transcript, setTranscript, result, processing, onProcess, onSave, onDiscard }) {
  return (
    <>
      <form onSubmit={onProcess} style={{ display: 'grid', gap: 14 }}>
        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 12 }}>
          <label style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
            <span style={inputLabel}>Tipo</span>
            <select value={kind} onChange={(e) => setKind(e.target.value)} style={trInput}>
              <option value="all-hands">All Hands · time</option>
              <option value="cliente">Reunião com cliente</option>
            </select>
          </label>
          {kind === 'cliente' && (
            <label style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
              <span style={inputLabel}>Cliente *</span>
              <input value={client} onChange={(e) => setClient(e.target.value)} placeholder="ex: Soldado de Deus" required style={trInput} />
            </label>
          )}
          <label style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
            <span style={inputLabel}>Data</span>
            <input type="date" value={date} onChange={(e) => setDate(e.target.value)} style={trInput} />
          </label>
        </div>

        <label style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
          <span style={inputLabel}>Transcrição · cole o texto completo</span>
          <textarea
            value={transcript}
            onChange={(e) => setTranscript(e.target.value)}
            placeholder="Cole aqui a transcrição do Meet, Zoom, ou texto da reunião. O Claude vai identificar quem falou, decisões, ações e prazos."
            rows={10}
            style={{ ...trInput, minHeight: 220, resize: 'vertical', fontFamily: 'monospace', fontSize: 12 }}
          />
          <div style={{ display: 'flex', justifyContent: 'space-between', fontSize: 11, color: 'var(--text-faint)' }}>
            <span>{transcript.split(/\s+/).filter(Boolean).length} palavras · {transcript.length} caracteres</span>
            <span>Suporta texto puro, formato Meet (com timestamps) ou exports do Otter/Fireflies</span>
          </div>
        </label>

        <div style={{ display: 'flex', justifyContent: 'space-between', flexWrap: 'wrap', gap: 10 }}>
          <button type="button" onClick={() => {
            // Demo: preenche com texto de exemplo
            setTranscript(kind === 'all-hands'
              ? `[09:02] Luan: Pessoal, bom dia. Vamos começar. Como tá a semana?\n[09:04] Reinaldy: Tô com sobrecarga, os 12 carrosseis do Wanderson tão pesados. Preciso de redistribuição em algum lugar.\n[09:06] Lucas: Posso pegar o banner do Pr. Anderson. Tava mais tranquilo essa semana.\n[09:08] Luan: Combinado então. Reinaldy foca nos carrosseis.\n[09:12] Grazi: Sobre o Soldado, ele aprovou abril em 2 dias. Recorde. Tá pedindo pra puxar maio.\n[09:14] Luan: Vamos antecipar pra dia 18 então. Lucas, prioridade 1 essa semana é Brady, 10 reels até quinta.\n[09:18] Grazi: Também temos Possmozer USA confirmado, começa dia 20.\n[09:22] Lucas: Beleza, ajusto o calendário.\n[09:25] Luan: Café Graviola pausou contrato por 60 dias, lembrando o time.\n[09:30] Todos: Boa semana.`
              : `[10:00] Luan: Robert, bom dia. Falando sobre maio.\n[10:02] Robert: Cara, abril foi excelente. Quero falar do plano premium.\n[10:05] Luan: Posso mandar a proposta amanhã.\n[10:08] Robert: Quero +2 Reels/mês. Vamos focar em vulnerabilidade real, foi o que mais funcionou.\n[10:12] Robert: Sessão de fotos · podemos remarcar pra dia 22?\n[10:14] Luan: Combinado. A Grazi atualiza a ficha hoje.`);
          }} style={{
            appearance: 'none', border: '1px dashed var(--border-strong)',
            background: 'transparent', color: 'var(--text-muted)',
            padding: '10px 16px', borderRadius: 'var(--r-btn)',
            fontSize: 12, fontFamily: 'inherit', cursor: 'pointer',
          }}>
            ↺ usar exemplo
          </button>
          <button type="submit" disabled={!transcript.trim() || processing} style={{
            appearance: 'none', border: '1px solid var(--accent)',
            background: !transcript.trim() || processing ? 'var(--surface)' : 'var(--accent)',
            color: !transcript.trim() || processing ? 'var(--text-faint)' : '#fff',
            padding: '10px 20px', borderRadius: 'var(--r-btn)',
            fontSize: 13, fontWeight: 500, fontFamily: 'inherit',
            cursor: !transcript.trim() || processing ? 'not-allowed' : 'pointer',
            display: 'inline-flex', alignItems: 'center', gap: 8,
          }}>
            {processing ? '⊙ processando...' : '✨ Processar com Claude'}
          </button>
        </div>
      </form>

      {result && (
        <div style={{ marginTop: 28, paddingTop: 24, borderTop: '1px solid var(--border)' }}>
          <ResultPreview result={result} onSave={onSave} onDiscard={onDiscard} />
        </div>
      )}
    </>
  );
}

function ResultPreview({ result, onSave, onDiscard }) {
  return (
    <div style={{
      padding: 'var(--space-5)',
      background: 'linear-gradient(135deg, rgba(154,155,229,0.08), rgba(154,155,229,0.02))',
      border: '1px solid rgba(154,155,229,0.30)',
      borderRadius: 'var(--r-card-lg)',
      animation: 'fadeUp 600ms var(--ease-out)',
    }}>
      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: 12, marginBottom: 20, flexWrap: 'wrap' }}>
        <div>
          <div className="t-overline" style={{ color: 'var(--accent)', marginBottom: 6 }}>
            ✨ processado pelo Claude · {result.durationEstimate}min de áudio detectados
          </div>
          <h3 className="t-h3" style={{ margin: 0 }}>
            <span className="t-light">Reunião · </span>
            <span className="punch">{result.kind === 'all-hands' ? 'All Hands' : result.client}</span>
            <span className="t-light"> · {result.date}</span>
          </h3>
        </div>
        <div style={{ display: 'inline-flex', gap: 8, flexWrap: 'wrap' }}>
          <button onClick={onDiscard} style={{
            appearance: 'none', border: '1px solid var(--border-strong)',
            background: 'var(--surface)', color: 'var(--text-muted)',
            padding: '8px 14px', borderRadius: 'var(--r-btn)',
            fontSize: 12, fontFamily: 'inherit', cursor: 'pointer',
          }}>Descartar</button>
          <button onClick={onSave} style={{
            appearance: 'none', border: '1px solid var(--accent)',
            background: 'var(--accent)', color: '#fff',
            padding: '8px 16px', borderRadius: 'var(--r-btn)',
            fontSize: 12, fontWeight: 500, fontFamily: 'inherit', cursor: 'pointer',
          }}>✓ Salvar e atualizar dashboard</button>
        </div>
      </div>

      <Block title="Resumo">
        <p style={{ margin: 0, fontSize: 14, color: 'var(--text)', lineHeight: 1.6 }}>{result.summary}</p>
      </Block>

      <Block title={`Decisões · ${result.decisions.length}`}>
        <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
          {result.decisions.map((d, i) => (
            <div key={i} style={{
              padding: '10px 14px', borderLeft: '3px solid var(--accent)',
              background: 'var(--surface)', border: '1px solid var(--border)',
              borderRadius: 'var(--r-btn)',
              display: 'flex', justifyContent: 'space-between', gap: 12, alignItems: 'center',
            }}>
              <span style={{ fontSize: 13, color: 'var(--text)', lineHeight: 1.5 }}>{d.text}</span>
              {d.who && <Pill tone="purple">{d.who}</Pill>}
            </div>
          ))}
        </div>
      </Block>

      <Block title={`Ações com prazo · ${result.actions.length}`}>
        <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
          {result.actions.map((a, i) => (
            <div key={i} style={{
              padding: '10px 14px',
              background: 'var(--surface)', border: '1px solid var(--border)',
              borderRadius: 'var(--r-btn)',
              display: 'grid', gridTemplateColumns: '1fr auto auto', gap: 12, alignItems: 'center',
            }}>
              <span style={{ fontSize: 13, color: 'var(--text)', lineHeight: 1.5 }}>{a.text}</span>
              {a.due && <span style={{ fontSize: 11, color: 'var(--text-faint)' }}>dia {a.due}</span>}
              {a.who && <Pill>{a.who}</Pill>}
            </div>
          ))}
        </div>
      </Block>

      {result.announcements?.length > 0 && (
        <Block title={`Avisos · ${result.announcements.length}`}>
          <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
            {result.announcements.map((a, i) => {
              const tone = { success: '#6FC878', warning: '#F3AE4D', info: '#77B8F1' }[a.tone] || '#77B8F1';
              return (
                <div key={i} style={{
                  padding: '10px 14px',
                  background: tone + '12', borderLeft: `3px solid ${tone}`,
                  border: `1px solid ${tone}40`,
                  borderRadius: 'var(--r-btn)',
                  fontSize: 13, color: 'var(--text)',
                }}>{a.text}</div>
              );
            })}
          </div>
        </Block>
      )}

      <Block title="Tópicos detectados">
        <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>
          {result.keyTopics.map(t => (
            <span key={t} style={{
              fontSize: 11, padding: '4px 10px',
              background: 'var(--surface)', border: '1px solid var(--border)',
              borderRadius: 999, color: 'var(--text-muted)',
            }}>#{t}</span>
          ))}
        </div>
      </Block>

      <div style={{
        marginTop: 18, padding: '10px 14px',
        background: 'var(--surface-soft)', border: '1px dashed var(--border-strong)',
        borderRadius: 'var(--r-btn)',
        fontSize: 11, color: 'var(--text-faint)',
      }}>
        🔄 Ao salvar: {result.kind === 'all-hands'
          ? 'decisões e ações vão pro mural da All Hands · ações entram na Pauta de cada responsável · avisos viram notificações no time'
          : `entrada no histórico do ${result.client} · ações criam tarefas no ClickUp · resumo vai pra ficha do cliente`}
      </div>
    </div>
  );
}

function Block({ title, children }) {
  return (
    <div style={{ marginBottom: 18 }}>
      <div className="t-overline" style={{ color: 'var(--accent)', marginBottom: 8 }}>{title}</div>
      {children}
    </div>
  );
}

const inputLabel = { fontSize: 11, color: 'var(--text-faint)', letterSpacing: '0.04em', textTransform: 'uppercase' };
const trInput = {
  appearance: 'none',
  border: '1px solid var(--border-strong)',
  background: 'var(--surface)', color: 'var(--text)',
  padding: '9px 12px', borderRadius: 'var(--r-btn)',
  fontFamily: 'inherit', fontSize: 13, outline: 'none',
};

function HistoryView() {
  return (
    <div>
      <p style={{ margin: '0 0 16px', fontSize: 13, color: 'var(--text-muted)' }}>
        Últimas transcrições processadas. Clique pra ver o resumo + ações geradas.
      </p>
      <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
        {MOCK_HISTORY.map(h => (
          <div key={h.id} style={{
            padding: 'var(--space-3) var(--space-4)',
            background: 'var(--surface)', border: '1px solid var(--border)',
            borderLeft: `3px solid ${h.kind === 'all-hands' ? 'var(--accent)' : '#77B8F1'}`,
            borderRadius: 'var(--r-card)',
            display: 'grid', gridTemplateColumns: '120px 1fr auto auto', gap: 14, alignItems: 'center',
            cursor: 'pointer',
            transition: 'border-color var(--t-fast)',
          }}
          onMouseEnter={(e) => e.currentTarget.style.borderColor = 'var(--accent)'}
          onMouseLeave={(e) => e.currentTarget.style.borderColor = 'var(--border)'}>
            <Pill tone={h.kind === 'all-hands' ? 'purple' : 'neutral'}>
              {h.kind === 'all-hands' ? '☀ All Hands' : '◉ Cliente'}
            </Pill>
            <div>
              <div style={{ fontSize: 14, color: 'var(--text)', fontWeight: 500 }}>
                {h.kind === 'all-hands' ? `Reunião do time · ${h.date}` : `${h.client} · ${h.contact}`}
              </div>
              <div style={{ fontSize: 11, color: 'var(--text-faint)', marginTop: 2 }}>
                {h.kind === 'cliente' && `${h.date} · `}{h.durationMin}min · processado {h.processedAt}
              </div>
            </div>
            <span style={{ fontSize: 11, color: 'var(--text-faint)' }}>{h.processedAt}</span>
            <Icon.Arrow width={14} height={14} style={{ color: 'var(--text-faint)' }} />
          </div>
        ))}
      </div>
    </div>
  );
}

Object.assign(window, { SectionTranscriptions });
