/* screen_marketing_marcas.jsx
   Módulo Marcas e Estratégia — repositório estratégico por marca.
   Blocos B1/B4: Marketing. B2/B3/B5: AI Strategist.
   Expõe window.MktMarcasScreen.
*/

// ─── Constantes ───────────────────────────────────────────────────────────────

const MARCAS_STATUS_CFG = {
  rascunho:  { label: 'Rascunho',  color: 'var(--text-muted)', bg: 'var(--bg-sunken)' },
  submetido: { label: 'Submetido', color: '#f59e0b',           bg: 'rgba(245,158,11,0.12)' },
  aprovado:  { label: 'Aprovado',  color: '#22c55e',           bg: 'rgba(34,197,94,0.12)' },
  arquivado: { label: 'Arquivado', color: 'var(--text-dim)',   bg: 'var(--bg-sunken)' },
};

const CANAIS_LISTA = ['email','linkedin','instagram','facebook','blog','google_ads','meta_ads','youtube','whatsapp','pr','eventos'];

const BADGE_CFG = {
  'MARKETING':     { bg: 'rgba(56,89,208,0.12)', color: '#3859D0' },
  'AI STRATEGIST': { bg: 'rgba(139,92,246,0.12)', color: '#8b5cf6' },
};

const BLOCOS = [
  { key: 'b1', label: 'Identidade',   badge: 'MARKETING',      dbKey: 'block1_identity' },
  { key: 'b2', label: 'ICP',          badge: 'AI STRATEGIST',  dbKey: 'block2_icp' },
  { key: 'b3', label: 'Personas',     badge: 'AI STRATEGIST',  dbKey: 'block3_personas' },
  { key: 'b4', label: 'Tom & Voz',    badge: 'MARKETING',      dbKey: 'block4_tom_voz' },
  { key: 'b5', label: 'Concorrentes', badge: 'AI STRATEGIST',  dbKey: 'block5_concorrentes' },
];

const EMPTY_B1 = { mission: '', vision: '', positioning_narrative: '', usps_marca: [], values: [], year_founded: null };
const EMPTY_B2 = { sectors: [], company_size: [], geo: [], decision_makers: [], budget_range: { min: 0, max: 0, currency: 'EUR' }, purchase_cycle: '', maturity: '' };
const EMPTY_B4 = { tone: '', attributes: [], do: [], dont: [], reference_brands: [], vocabulary_avoid: [] };

function calcMarcaPct(m) {
  const has = (v) => typeof v === 'string' ? v.trim().length > 0 : Array.isArray(v) ? v.length > 0 : !!v;
  const b1 = m.block1_identity || {};
  const b2 = m.block2_icp || {};
  const b3 = m.block3_personas || [];
  const b4 = m.block4_tom_voz || {};
  const b5 = m.block5_concorrentes || [];
  const s1 = [has(b1.positioning_narrative), has(b1.usps_marca), has(b1.mission)].filter(Boolean).length / 3;
  const s2 = [has(b2.sectors), has(b2.decision_makers), has(b2.geo)].filter(Boolean).length / 3;
  const s3 = b3.length > 0 ? 1 : 0;
  const s4 = [has(b4.tone), has(b4.do), has(b4.dont)].filter(Boolean).length / 3;
  const s5 = b5.length > 0 ? 1 : 0;
  return Math.round(((s1 + s2 + s3 + s4 + s5) / 5) * 100);
}

// ─── ChipList ─────────────────────────────────────────────────────────────────

const ChipList = ({ items, onChange, placeholder = 'Adicionar...' }) => {
  const [val, setVal] = React.useState('');
  const add = () => {
    const t = val.trim();
    if (!t || (items || []).includes(t)) return;
    onChange([...(items || []), t]);
    setVal('');
  };
  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 5 }}>
        {(items || []).map((chip, i) => (
          <span key={i} style={{ display: 'inline-flex', alignItems: 'center', gap: 4, fontSize: 11, padding: '3px 8px', borderRadius: 99, background: 'var(--bg-elev)', border: '1px solid var(--border)', color: 'var(--text)' }}>
            {chip}
            <button onClick={() => onChange((items || []).filter((_, j) => j !== i))} style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--text-dim)', fontSize: 12, padding: 0, lineHeight: 1 }}>×</button>
          </span>
        ))}
      </div>
      <div style={{ display: 'flex', gap: 6 }}>
        <input value={val} onChange={e => setVal(e.target.value)} onKeyDown={e => e.key === 'Enter' && (e.preventDefault(), add())} placeholder={placeholder}
          style={{ flex: 1, fontSize: 12, padding: '6px 10px', borderRadius: 6, background: 'var(--bg-sunken)', border: '1px solid var(--border)', color: 'var(--text)', outline: 'none' }} />
        <button onClick={add} className="btn btn-xs" style={{ flexShrink: 0 }}>+</button>
      </div>
    </div>
  );
};

// ─── Badge ───────────────────────────────────────────────────────────────────

const BlockBadge = ({ badge }) => {
  const cfg = BADGE_CFG[badge] || BADGE_CFG['MARKETING'];
  return (
    <span style={{ fontSize: 9, fontWeight: 700, letterSpacing: '0.09em', padding: '2px 7px', borderRadius: 4, background: cfg.bg, color: cfg.color }}>
      {badge}
    </span>
  );
};

// ─── Field ───────────────────────────────────────────────────────────────────

const MField = ({ label, children }) => (
  <div style={{ display: 'flex', flexDirection: 'column', gap: 5 }}>
    <label style={{ fontSize: 10, fontWeight: 600, color: 'var(--text-muted)', letterSpacing: '0.06em', textTransform: 'uppercase' }}>{label}</label>
    {children}
  </div>
);

const MInput = (props) => (
  <input {...props} style={{ fontSize: 13, padding: '7px 10px', borderRadius: 6, background: 'var(--bg-sunken)', border: '1px solid var(--border)', color: 'var(--text)', outline: 'none', width: '100%', boxSizing: 'border-box', ...props.style }} />
);

const MTextarea = ({ rows = 2, ...props }) => (
  <textarea rows={rows} {...props} style={{ fontSize: 13, padding: '7px 10px', borderRadius: 6, background: 'var(--bg-sunken)', border: '1px solid var(--border)', color: 'var(--text)', outline: 'none', width: '100%', boxSizing: 'border-box', resize: 'vertical', ...props.style }} />
);

const MSelect = ({ value, onChange, options, placeholder = 'Seleccionar...' }) => (
  <select value={value || ''} onChange={e => onChange(e.target.value)} style={{ fontSize: 13, padding: '7px 10px', borderRadius: 6, background: 'var(--bg-sunken)', border: '1px solid var(--border)', color: value ? 'var(--text)' : 'var(--text-dim)', width: '100%', appearance: 'none' }}>
    <option value="">{placeholder}</option>
    {options.map(([v, l]) => <option key={v} value={v}>{l}</option>)}
  </select>
);

// ─── Lista de marcas ───────────────────────────────────────────────────────────

const MarcasList = ({ onSelect }) => {
  const [marcas, setMarcas] = React.useState([]);
  const [loading, setLoading] = React.useState(true);

  React.useEffect(() => {
    fetch('/api/marketing/marcas').then(r => r.json()).then(setMarcas).finally(() => setLoading(false));
  }, []);

  if (loading) return <div style={{ padding: 24, color: 'var(--text-dim)', fontSize: 13 }}>A carregar...</div>;

  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>
      {marcas.map(m => {
        const pct = calcMarcaPct(m);
        const scfg = MARCAS_STATUS_CFG[m.estrategia_status || 'rascunho'] || MARCAS_STATUS_CFG.rascunho;
        return (
          <div key={m.id} onClick={() => onSelect(m)}
            style={{ display: 'flex', alignItems: 'center', gap: 12, padding: '14px 16px', borderRadius: 10, cursor: 'pointer', background: 'var(--bg-sunken)', border: '1px solid var(--border)', transition: 'border-color 0.15s' }}
            onMouseEnter={e => e.currentTarget.style.borderColor = 'var(--accent)'}
            onMouseLeave={e => e.currentTarget.style.borderColor = 'var(--border)'}>
            <div style={{ width: 10, height: 10, borderRadius: '50%', background: m.color || '#3859D0', flexShrink: 0 }} />
            <div style={{ flex: 1 }}>
              <div style={{ fontSize: 14, fontWeight: 600, color: 'var(--text)' }}>{m.name}</div>
              {m.estrategia_updated_at && (
                <div style={{ fontSize: 11, color: 'var(--text-dim)', marginTop: 2 }}>
                  Actualizado {new Date(m.estrategia_updated_at).toLocaleDateString('pt-PT', { day: '2-digit', month: 'short', year: 'numeric' })}
                </div>
              )}
            </div>
            <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-end', gap: 3 }}>
              <div style={{ fontSize: 11, color: 'var(--text-muted)', fontFamily: 'var(--font-mono)' }}>{pct}%</div>
              <div style={{ width: 80, height: 4, borderRadius: 99, background: 'var(--border)' }}>
                <div style={{ width: `${pct}%`, height: '100%', borderRadius: 99, background: pct >= 80 ? '#22c55e' : pct >= 40 ? '#f59e0b' : 'var(--accent)', transition: 'width 0.4s' }} />
              </div>
            </div>
            <span style={{ fontSize: 9, fontWeight: 700, letterSpacing: '0.07em', textTransform: 'uppercase', padding: '3px 8px', borderRadius: 5, background: scfg.bg, color: scfg.color, flexShrink: 0 }}>{scfg.label}</span>
            <Icon name="chevron-right" size={14} style={{ color: 'var(--text-dim)' }} />
          </div>
        );
      })}
    </div>
  );
};

// ─── Form de Marca ─────────────────────────────────────────────────────────────

const MarcaForm = ({ brandId, brandName, brandColor, onBack }) => {
  const [activeBloco, setActiveBloco] = React.useState('b1');
  const [data, setData] = React.useState(null);
  const [b1, setB1] = React.useState(EMPTY_B1);
  const [b2, setB2] = React.useState(EMPTY_B2);
  const [b3, setB3] = React.useState([]);
  const [b4, setB4] = React.useState(EMPTY_B4);
  const [b5, setB5] = React.useState([]);
  const [canais, setCanais] = React.useState([]);
  const [saving, setSaving] = React.useState(false);
  const [saved, setSaved] = React.useState(false);
  const [generating, setGenerating] = React.useState(null);
  const [genError, setGenError] = React.useState(null);
  const saveTimers = React.useRef({});

  React.useEffect(() => {
    fetch(`/api/marketing/marcas/${brandId}`).then(r => r.json()).then(d => {
      setData(d);
      if (d.block1_identity) setB1({ ...EMPTY_B1, ...d.block1_identity });
      if (d.block2_icp) setB2({ ...EMPTY_B2, ...d.block2_icp });
      if (d.block3_personas) setB3(d.block3_personas);
      if (d.block4_tom_voz) setB4({ ...EMPTY_B4, ...d.block4_tom_voz });
      if (d.block5_concorrentes) setB5(d.block5_concorrentes);
      if (d.canais_preferidos?.length) setCanais(d.canais_preferidos);
    });
  }, [brandId]);

  const autoSave = React.useCallback((blockKey, blockData) => {
    clearTimeout(saveTimers.current[blockKey]);
    saveTimers.current[blockKey] = setTimeout(async () => {
      setSaving(true); setSaved(false);
      try {
        await fetch(`/api/marketing/marcas/${brandId}/blocks/${blockKey}`, {
          method: 'PUT', headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ data: blockData }),
        });
        setSaved(true); setTimeout(() => setSaved(false), 2000);
      } finally { setSaving(false); }
    }, 800);
  }, [brandId]);

  React.useEffect(() => { if (data) autoSave('block1_identity', b1); }, [b1]);
  React.useEffect(() => { if (data) autoSave('block2_icp', b2); }, [b2]);
  React.useEffect(() => { if (data) autoSave('block3_personas', b3); }, [b3]);
  React.useEffect(() => { if (data) autoSave('block4_tom_voz', b4); }, [b4]);
  React.useEffect(() => { if (data) autoSave('block5_concorrentes', b5); }, [b5]);
  React.useEffect(() => { if (data) autoSave('canais_preferidos', canais); }, [canais]);

  async function generate(type) {
    const endpointMap = { icp: 'generate-icp', personas: 'generate-personas', tom: 'generate-tom', competitors: 'analyze-competitors' };
    setGenerating(type); setGenError(null);
    try {
      const res = await fetch(`/api/marketing/marcas/${brandId}/${endpointMap[type]}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({}) });
      const json = await res.json();
      if (!res.ok) { setGenError(json.error || 'Erro na geração'); return; }
      if (type === 'icp' && json.icp) { setB2(p => ({ ...p, ...json.icp })); setActiveBloco('b2'); }
      if (type === 'personas' && json.personas) { setB3(json.personas); setActiveBloco('b3'); }
      if (type === 'tom' && json.tom) { setB4(p => ({ ...p, ...json.tom })); setActiveBloco('b4'); }
      if (type === 'competitors' && json.concorrentes) { setB5(json.concorrentes); setActiveBloco('b5'); }
    } catch { setGenError('Erro de rede'); }
    finally { setGenerating(null); }
  }

  async function handleSubmit() {
    await fetch(`/api/marketing/marcas/${brandId}/submit`, { method: 'POST' });
  }

  if (!data) return <div style={{ padding: 32, color: 'var(--text-dim)', fontSize: 13 }}>A carregar...</div>;

  const statusCfg = MARCAS_STATUS_CFG[data.status || 'rascunho'] || MARCAS_STATUS_CFG.rascunho;

  return (
    <div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
      {/* Header */}
      <div style={{ padding: '16px 24px 0', flexShrink: 0 }}>
        <button onClick={onBack} style={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 5, color: 'var(--text-dim)', fontSize: 12, marginBottom: 12, padding: 0 }}>
          <Icon name="arrow-left" size={13} /> Marcas
        </button>
        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 14 }}>
          <div style={{ display: 'flex', alignItems: 'center', gap: 9 }}>
            <div style={{ width: 10, height: 10, borderRadius: '50%', background: brandColor }} />
            <div>
              <div style={{ fontSize: 10, color: 'var(--text-dim)', fontFamily: 'var(--font-mono)', letterSpacing: '0.08em' }}>MARKETING · MARCAS E ESTRATÉGIA</div>
              <h1 className="font-display" style={{ margin: '2px 0 0', fontSize: 20, fontWeight: 600, letterSpacing: '-0.015em' }}>{brandName}</h1>
            </div>
            <span style={{ fontSize: 9, fontWeight: 700, letterSpacing: '0.07em', textTransform: 'uppercase', padding: '3px 8px', borderRadius: 5, background: statusCfg.bg, color: statusCfg.color }}>{statusCfg.label}</span>
          </div>
          <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
            {saved && <span style={{ fontSize: 11, color: '#22c55e', display: 'flex', alignItems: 'center', gap: 4 }}><Icon name="check" size={11} /> Guardado</span>}
            {saving && <span style={{ fontSize: 11, color: 'var(--text-dim)' }}>A guardar...</span>}
            <button className="btn btn-sm" onClick={handleSubmit} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
              <Icon name="send" size={12} /> Submeter
            </button>
          </div>
        </div>

        {/* Tabs dos blocos */}
        <div style={{ display: 'flex', gap: 1, borderBottom: '1px solid var(--border)' }}>
          {BLOCOS.map((b, i) => (
            <button key={b.key} onClick={() => setActiveBloco(b.key)} style={{
              background: 'none', border: 'none', cursor: 'pointer', padding: '7px 12px', fontSize: 12, fontWeight: 500,
              color: activeBloco === b.key ? 'var(--text)' : 'var(--text-dim)',
              borderBottom: activeBloco === b.key ? '2px solid var(--accent)' : '2px solid transparent',
              marginBottom: -1, display: 'flex', alignItems: 'center', gap: 6, transition: 'color 0.15s',
            }}>
              <span style={{ width: 18, height: 18, borderRadius: '50%', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', fontSize: 9, fontWeight: 700, fontFamily: 'var(--font-mono)', background: activeBloco === b.key ? 'var(--accent)' : 'var(--bg-sunken)', color: activeBloco === b.key ? '#fff' : 'var(--text-dim)' }}>{i + 1}</span>
              {b.label}
              <BlockBadge badge={b.badge} />
            </button>
          ))}
        </div>
      </div>

      {/* Body */}
      <div className="scrollbar" style={{ flex: 1, overflowY: 'auto', padding: '20px 24px 48px' }}>
        {genError && (
          <div style={{ marginBottom: 14, padding: '10px 14px', borderRadius: 8, fontSize: 12, background: 'rgba(239,68,68,0.1)', color: '#ef4444', border: '1px solid rgba(239,68,68,0.25)' }}>
            {genError}
          </div>
        )}

        {/* B1 — IDENTIDADE */}
        {activeBloco === 'b1' && (
          <div style={{ maxWidth: 640, display: 'flex', flexDirection: 'column', gap: 18 }}>
            <SectionH title="Identidade da Marca" badge="MARKETING" />
            <MField label="Missão"><MTextarea value={b1.mission} onChange={e => setB1(p => ({ ...p, mission: e.target.value }))} placeholder="O propósito da marca..." /></MField>
            <MField label="Visão"><MTextarea value={b1.vision} onChange={e => setB1(p => ({ ...p, vision: e.target.value }))} placeholder="Onde queremos estar..." /></MField>
            <MField label="Narrativa de posicionamento"><MTextarea rows={3} value={b1.positioning_narrative} onChange={e => setB1(p => ({ ...p, positioning_narrative: e.target.value }))} placeholder="Como nos diferenciamos..." /></MField>
            <MField label="USPs da Marca"><ChipList items={b1.usps_marca} onChange={v => setB1(p => ({ ...p, usps_marca: v }))} placeholder="Adicionar USP..." /></MField>
            <MField label="Valores"><ChipList items={b1.values} onChange={v => setB1(p => ({ ...p, values: v }))} placeholder="Adicionar valor..." /></MField>
            <MField label="Canais preferidos">
              <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>
                {CANAIS_LISTA.map(c => (
                  <button key={c} onClick={() => setCanais(prev => prev.includes(c) ? prev.filter(x => x !== c) : [...prev, c])}
                    style={{ fontSize: 11, padding: '4px 10px', borderRadius: 6, cursor: 'pointer', background: canais.includes(c) ? 'var(--accent)' : 'var(--bg-sunken)', color: canais.includes(c) ? '#fff' : 'var(--text-muted)', border: `1px solid ${canais.includes(c) ? 'var(--accent)' : 'var(--border)'}` }}>
                    {c}
                  </button>
                ))}
              </div>
            </MField>
          </div>
        )}

        {/* B2 — ICP */}
        {activeBloco === 'b2' && (
          <div style={{ maxWidth: 640, display: 'flex', flexDirection: 'column', gap: 18 }}>
            <SectionH title="Ideal Customer Profile (ICP)" badge="AI STRATEGIST">
              <button className="btn btn-sm btn-ai" onClick={() => generate('icp')} disabled={!!generating} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
                <Icon name="sparkles" size={12} /> {generating === 'icp' ? 'A gerar...' : 'Gerar com AI'}
              </button>
            </SectionH>
            <MField label="Sectores alvo"><ChipList items={b2.sectors} onChange={v => setB2(p => ({ ...p, sectors: v }))} placeholder="Ex: Artes gráficas..." /></MField>
            <MField label="Dimensão da empresa"><ChipList items={b2.company_size} onChange={v => setB2(p => ({ ...p, company_size: v }))} placeholder="Ex: PME 10-50..." /></MField>
            <MField label="Geografias"><ChipList items={b2.geo} onChange={v => setB2(p => ({ ...p, geo: v }))} placeholder="Ex: Portugal, Espanha..." /></MField>
            <MField label="Decision makers"><ChipList items={b2.decision_makers} onChange={v => setB2(p => ({ ...p, decision_makers: v }))} placeholder="Ex: Director de produção..." /></MField>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 14 }}>
              <MField label="Budget mín. (EUR)"><MInput type="number" value={b2.budget_range?.min || ''} onChange={e => setB2(p => ({ ...p, budget_range: { ...p.budget_range, min: Number(e.target.value) } }))} /></MField>
              <MField label="Budget máx. (EUR)"><MInput type="number" value={b2.budget_range?.max || ''} onChange={e => setB2(p => ({ ...p, budget_range: { ...p.budget_range, max: Number(e.target.value) } }))} /></MField>
            </div>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 14 }}>
              <MField label="Ciclo de compra">
                <MSelect value={b2.purchase_cycle} onChange={v => setB2(p => ({ ...p, purchase_cycle: v }))} options={[['short','Curto (<3m)'],['medium','Médio (3-12m)'],['long','Longo (>12m)']]} />
              </MField>
              <MField label="Maturidade do mercado">
                <MSelect value={b2.maturity} onChange={v => setB2(p => ({ ...p, maturity: v }))} options={[['early','Emergente'],['growing','Em crescimento'],['mature','Maduro']]} />
              </MField>
            </div>
          </div>
        )}

        {/* B3 — PERSONAS */}
        {activeBloco === 'b3' && (
          <div style={{ maxWidth: 700, display: 'flex', flexDirection: 'column', gap: 18 }}>
            <SectionH title="Buyer Personas" badge="AI STRATEGIST">
              <button className="btn btn-sm btn-ai" onClick={() => generate('personas')} disabled={!!generating} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
                <Icon name="sparkles" size={12} /> {generating === 'personas' ? 'A gerar...' : 'Gerar com AI'}
              </button>
              <button className="btn btn-sm" onClick={() => setB3(p => [...p, { name: '', role: '', age_range: '', seniority: 'senior', goals: [], pains: [], objections: [], channels: [], decision_weight: 'medium' }])} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
                <Icon name="plus" size={12} /> Adicionar
              </button>
            </SectionH>
            {b3.length === 0 && <div style={{ padding: '32px 0', textAlign: 'center', color: 'var(--text-dim)', fontSize: 12 }}>Gera personas com AI ou adiciona manualmente.</div>}
            {b3.map((p, idx) => (
              <div key={idx} style={{ border: '1px solid var(--border)', borderRadius: 10, padding: '14px 18px', background: 'var(--bg-sunken)', display: 'flex', flexDirection: 'column', gap: 12 }}>
                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
                  <div style={{ fontSize: 13, fontWeight: 600, color: 'var(--text)' }}>Persona {idx + 1}{p.name ? ` · ${p.name}` : ''}</div>
                  <button onClick={() => setB3(prev => prev.filter((_, i) => i !== idx))} style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--text-dim)', fontSize: 11 }}>Remover</button>
                </div>
                <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 10 }}>
                  <MField label="Nome"><MInput value={p.name} onChange={e => setB3(prev => prev.map((x, i) => i === idx ? { ...x, name: e.target.value } : x))} placeholder="Ana Rodrigues" /></MField>
                  <MField label="Cargo"><MInput value={p.role} onChange={e => setB3(prev => prev.map((x, i) => i === idx ? { ...x, role: e.target.value } : x))} /></MField>
                  <MField label="Faixa etária"><MInput value={p.age_range} onChange={e => setB3(prev => prev.map((x, i) => i === idx ? { ...x, age_range: e.target.value } : x))} placeholder="38-48" /></MField>
                </div>
                <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 10 }}>
                  <MField label="Senioridade"><MSelect value={p.seniority} onChange={v => setB3(prev => prev.map((x, i) => i === idx ? { ...x, seniority: v } : x))} options={[['mid','Mid'],['senior','Senior'],['director','Director'],['c-level','C-Level']]} /></MField>
                  <MField label="Peso de decisão"><MSelect value={p.decision_weight} onChange={v => setB3(prev => prev.map((x, i) => i === idx ? { ...x, decision_weight: v } : x))} options={[['high','Alto'],['medium','Médio'],['low','Baixo']]} /></MField>
                </div>
                <MField label="Objectivos"><ChipList items={p.goals} onChange={v => setB3(prev => prev.map((x, i) => i === idx ? { ...x, goals: v } : x))} placeholder="Objectivo..." /></MField>
                <MField label="Dores"><ChipList items={p.pains} onChange={v => setB3(prev => prev.map((x, i) => i === idx ? { ...x, pains: v } : x))} placeholder="Dor..." /></MField>
                <MField label="Objecções"><ChipList items={p.objections} onChange={v => setB3(prev => prev.map((x, i) => i === idx ? { ...x, objections: v } : x))} placeholder="Objecção..." /></MField>
              </div>
            ))}
          </div>
        )}

        {/* B4 — TOM & VOZ */}
        {activeBloco === 'b4' && (
          <div style={{ maxWidth: 640, display: 'flex', flexDirection: 'column', gap: 18 }}>
            <SectionH title="Tom & Voz" badge="MARKETING">
              <button className="btn btn-sm btn-ai" onClick={() => generate('tom')} disabled={!!generating} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
                <Icon name="sparkles" size={12} /> {generating === 'tom' ? 'A gerar...' : 'Gerar com AI'}
              </button>
            </SectionH>
            <MField label="Tom geral"><MTextarea value={b4.tone} onChange={e => setB4(p => ({ ...p, tone: e.target.value }))} placeholder="Ex: Técnico, directo e confiante..." /></MField>
            <MField label="Atributos"><ChipList items={b4.attributes} onChange={v => setB4(p => ({ ...p, attributes: v }))} placeholder="Atributo..." /></MField>
            <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 14 }}>
              <MField label="Fazer (Do)"><ChipList items={b4.do} onChange={v => setB4(p => ({ ...p, do: v }))} placeholder="Boa prática..." /></MField>
              <MField label="Evitar (Don't)"><ChipList items={b4.dont} onChange={v => setB4(p => ({ ...p, dont: v }))} placeholder="A evitar..." /></MField>
            </div>
            <MField label="Marcas de referência"><ChipList items={b4.reference_brands} onChange={v => setB4(p => ({ ...p, reference_brands: v }))} placeholder="Ex: Bosch..." /></MField>
            <MField label="Vocabulário a evitar"><ChipList items={b4.vocabulary_avoid} onChange={v => setB4(p => ({ ...p, vocabulary_avoid: v }))} placeholder="Ex: Revolucionário..." /></MField>
          </div>
        )}

        {/* B5 — CONCORRENTES */}
        {activeBloco === 'b5' && (
          <div style={{ maxWidth: 700, display: 'flex', flexDirection: 'column', gap: 18 }}>
            <SectionH title="Análise de Concorrentes" badge="AI STRATEGIST">
              <button className="btn btn-sm btn-ai" onClick={() => generate('competitors')} disabled={!!generating} style={{ display: 'flex', alignItems: 'center', gap: 5 }}>
                <Icon name="refresh-cw" size={12} style={{ animation: generating === 'competitors' ? 'spin 1s linear infinite' : 'none' }} />
                {generating === 'competitors' ? 'A analisar...' : 'Analisar com AI'}
              </button>
            </SectionH>
            {b5.length === 0 && <div style={{ padding: '32px 0', textAlign: 'center', color: 'var(--text-dim)', fontSize: 12 }}>Clica em "Analisar com AI" para identificar concorrentes.</div>}
            {b5.map((c, idx) => (
              <div key={idx} style={{ border: '1px solid var(--border)', borderRadius: 10, padding: '14px 18px', background: 'var(--bg-sunken)', display: 'flex', flexDirection: 'column', gap: 10 }}>
                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
                  <div style={{ fontSize: 13, fontWeight: 600, color: 'var(--text)' }}>{c.name || `Concorrente ${idx + 1}`}</div>
                  <button onClick={() => setB5(p => p.filter((_, i) => i !== idx))} style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--text-dim)', fontSize: 11 }}>Remover</button>
                </div>
                <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 10 }}>
                  <MField label="Nome"><MInput value={c.name} onChange={e => setB5(p => p.map((x, i) => i === idx ? { ...x, name: e.target.value } : x))} /></MField>
                  <MField label="Website"><MInput value={c.website || ''} onChange={e => setB5(p => p.map((x, i) => i === idx ? { ...x, website: e.target.value } : x))} placeholder="concorrente.com" /></MField>
                </div>
                <MField label="Posicionamento"><MTextarea value={c.positioning || ''} onChange={e => setB5(p => p.map((x, i) => i === idx ? { ...x, positioning: e.target.value } : x))} /></MField>
                <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 10 }}>
                  <MField label="Pontos fortes"><ChipList items={c.strengths || []} onChange={v => setB5(p => p.map((x, i) => i === idx ? { ...x, strengths: v } : x))} placeholder="Força..." /></MField>
                  <MField label="Pontos fracos"><ChipList items={c.weaknesses || []} onChange={v => setB5(p => p.map((x, i) => i === idx ? { ...x, weaknesses: v } : x))} placeholder="Fraqueza..." /></MField>
                </div>
                <MField label="O que nos diferencia">
                  <MTextarea value={c.differentiation_vs_us || ''} onChange={e => setB5(p => p.map((x, i) => i === idx ? { ...x, differentiation_vs_us: e.target.value } : x))} />
                </MField>
              </div>
            ))}
          </div>
        )}
      </div>
    </div>
  );
};

function SectionH({ title, badge, children }) {
  return (
    <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 4 }}>
      <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
        <h2 style={{ margin: 0, fontSize: 15, fontWeight: 600, color: 'var(--text)' }}>{title}</h2>
        <BlockBadge badge={badge} />
      </div>
      {children && <div style={{ display: 'flex', gap: 6 }}>{children}</div>}
    </div>
  );
}

// ─── MktMarcasScreen ──────────────────────────────────────────────────────────

const MktMarcasScreen = () => {
  const [selected, setSelected] = React.useState(null);

  if (selected) {
    return <MarcaForm brandId={selected.id} brandName={selected.name} brandColor={selected.color} onBack={() => setSelected(null)} />;
  }

  return (
    <div className="scrollbar" style={{ height: '100%', overflowY: 'auto' }}>
      <div style={{ padding: '28px 32px 0', marginBottom: 20 }}>
        <div style={{ fontSize: 10, color: 'var(--text-dim)', fontFamily: 'var(--font-mono)', letterSpacing: '0.08em' }}>MARKETING · MARCAS E ESTRATÉGIA</div>
        <h1 className="font-display" style={{ margin: '6px 0 4px', fontSize: 26, fontWeight: 600, letterSpacing: '-0.015em' }}>Marcas e Estratégia</h1>
        <div style={{ fontSize: 12, color: 'var(--text-muted)' }}>Repositório estratégico · ICP · Personas · Tom de voz · Concorrentes</div>
      </div>
      <div style={{ padding: '0 32px 48px', maxWidth: 680 }}>
        <MarcasList onSelect={setSelected} />
      </div>
    </div>
  );
};

window.MktMarcasScreen = MktMarcasScreen;
