/* ================================================================
   Tracker FMN — Conteúdo Orgânico v1
   Kanban horizontal · 6 status · Plataforma / Responsável / Gancho / Desenvolvimento / CTA
   ================================================================ */
const { useState, useEffect } = React;
const { LucideIcon, Btn, TopBar } = window;

const PLATAFORMAS = ['Reels', 'Carrossel', 'Imagem', 'Stories'];
const RESPONSAVEIS = ['Felipe', 'Amanda'];

const STATUS_COLS = ['Fazer', 'Criação', 'Gravação', 'Edição', 'Postagem', 'Feito'];
const COL_CFG = {
  'Fazer':    { dot:'#94a3b8', bg:'rgba(148,163,184,.05)', border:'rgba(148,163,184,.18)' },
  'Criação':  { dot:'#60a5fa', bg:'rgba(96,165,250,.05)',  border:'rgba(96,165,250,.2)'   },
  'Gravação': { dot:'#f59e0b', bg:'rgba(245,158,11,.05)',  border:'rgba(245,158,11,.2)'   },
  'Edição':   { dot:'#a78bfa', bg:'rgba(167,139,250,.05)', border:'rgba(167,139,250,.2)'  },
  'Postagem': { dot:'#fb923c', bg:'rgba(251,146,60,.05)',  border:'rgba(251,146,60,.2)'   },
  'Feito':    { dot:'#4ade80', bg:'rgba(74,222,128,.05)',  border:'rgba(74,222,128,.2)'   },
};

const PLAT_COLOR = {
  Reels:     '#f87171',
  Carrossel: '#60a5fa',
  Imagem:    '#a78bfa',
  Stories:   '#fb923c',
};

const PLAT_ICON = {
  Reels:     'play-circle',
  Carrossel: 'layout-grid',
  Imagem:    'image',
  Stories:   'circle-dot',
};

/* ── Badge de plataforma ─────────────────────────────────────────*/
function PlatBadge({ plat }) {
  const color = PLAT_COLOR[plat] || '#94a3b8';
  const icon  = PLAT_ICON[plat]  || 'file';
  return (
    <span style={{ display:'inline-flex', alignItems:'center', gap:4, padding:'2px 8px',
      borderRadius:999, fontSize:10, fontFamily:'Roboto,sans-serif', fontWeight:700,
      letterSpacing:'0.05em', background:`${color}18`, color, border:`1px solid ${color}33`, flexShrink:0 }}>
      <LucideIcon icon={icon} size={9}/>
      {plat}
    </span>
  );
}

/* ── Avatar de responsável ───────────────────────────────────────*/
function Avatar({ nome }) {
  const initials = nome === 'Felipe' ? 'FF' : 'AM';
  const bg       = nome === 'Felipe' ? 'rgba(234,170,65,.2)' : 'rgba(96,165,250,.2)';
  const color    = nome === 'Felipe' ? '#eaaa41'             : '#60a5fa';
  return (
    <span title={nome} style={{ width:20, height:20, borderRadius:999, background:bg,
      color, fontSize:8.5, fontFamily:'Roboto,sans-serif', fontWeight:900, flexShrink:0,
      display:'inline-flex', alignItems:'center', justifyContent:'center', letterSpacing:0 }}>
      {initials}
    </span>
  );
}

/* ── ContentCard ─────────────────────────────────────────────────*/
function ContentCard({ item, onEdit, onDelete, onStatusChange }) {
  const [hov, setHov] = useState(false);
  const cfg = COL_CFG[item.status] || COL_CFG['Fazer'];
  return (
    <div
      onMouseEnter={() => setHov(true)}
      onMouseLeave={() => setHov(false)}
      style={{ background: hov ? 'var(--app-surface-3)' : 'var(--app-surface-2)',
        border: `1px solid ${cfg.border}`,
        borderRadius:10, padding:'12px 13px',
        display:'flex', flexDirection:'column', gap:8,
        cursor:'pointer', transition:'all 150ms',
        boxShadow: hov ? '0 4px 16px rgba(0,0,0,.3)' : 'none' }}
      onClick={() => onEdit(item)}>

      {/* Header */}
      <div style={{ display:'flex', alignItems:'flex-start', justifyContent:'space-between', gap:6 }}>
        <div style={{ display:'flex', alignItems:'center', gap:6, flexWrap:'wrap', flex:1 }}>
          <PlatBadge plat={item.plataforma}/>
          <Avatar nome={item.responsavel}/>
        </div>
        <div style={{ display:'flex', gap:4, opacity: hov ? 1 : 0, transition:'opacity 120ms' }}>
          <button onClick={e => { e.stopPropagation(); onDelete(item.id); }}
            style={{ width:20, height:20, borderRadius:4, border:'none', background:'rgba(248,113,113,.15)',
              color:'#f87171', cursor:'pointer', display:'flex', alignItems:'center', justifyContent:'center' }}>
            <LucideIcon icon="trash-2" size={11}/>
          </button>
        </div>
      </div>

      {/* Tema */}
      <p style={{ margin:0, fontSize:12.5, fontFamily:'Roboto,sans-serif', fontWeight:700,
        color:'var(--text-1)', lineHeight:1.4 }}>
        {item.tema || <span style={{ color:'var(--text-3)', fontStyle:'italic' }}>Sem título</span>}
      </p>

      {/* Gancho preview */}
      {item.gancho && (
        <p style={{ margin:0, fontSize:11, fontFamily:'Roboto,sans-serif', color:'var(--text-3)',
          lineHeight:1.4, overflow:'hidden', display:'-webkit-box',
          WebkitLineClamp:2, WebkitBoxOrient:'vertical' }}>
          {item.gancho}
        </p>
      )}

      {/* Status pills (avançar / voltar) */}
      <div style={{ display:'flex', gap:4, marginTop:2 }} onClick={e => e.stopPropagation()}>
        {STATUS_COLS.indexOf(item.status) > 0 && (
          <button onClick={() => onStatusChange(item.id, STATUS_COLS[STATUS_COLS.indexOf(item.status)-1])}
            style={{ flex:1, padding:'4px 0', borderRadius:5, border:'1px solid rgba(255,255,255,.08)',
              background:'rgba(255,255,255,.04)', color:'var(--text-3)', fontSize:9.5,
              fontFamily:'Roboto,sans-serif', fontWeight:700, cursor:'pointer', letterSpacing:'0.04em' }}>
            ← Voltar
          </button>
        )}
        {STATUS_COLS.indexOf(item.status) < STATUS_COLS.length - 1 && (
          <button onClick={() => onStatusChange(item.id, STATUS_COLS[STATUS_COLS.indexOf(item.status)+1])}
            style={{ flex:1, padding:'4px 0', borderRadius:5,
              border:`1px solid ${cfg.border}`, background:cfg.bg,
              color:cfg.dot, fontSize:9.5, fontFamily:'Roboto,sans-serif',
              fontWeight:700, cursor:'pointer', letterSpacing:'0.04em' }}>
            Avançar →
          </button>
        )}
      </div>
    </div>
  );
}

/* ── OrgColumn ───────────────────────────────────────────────────*/
function OrgColumn({ col, items, onEdit, onDelete, onStatusChange, onNew }) {
  const cfg = COL_CFG[col];
  return (
    <div style={{ display:'flex', flexDirection:'column', gap:0,
      minWidth:240, maxWidth:260, flex:'0 0 250px', height:'100%' }}>
      {/* Cabeçalho */}
      <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between',
        padding:'0 2px 10px', flexShrink:0 }}>
        <div style={{ display:'flex', alignItems:'center', gap:7 }}>
          <div style={{ width:8, height:8, borderRadius:999, background:cfg.dot }}/>
          <span style={{ fontSize:11.5, fontFamily:'Roboto,sans-serif', fontWeight:700,
            letterSpacing:'0.06em', color:'var(--text-2)', textTransform:'uppercase' }}>{col}</span>
          <span style={{ padding:'1px 7px', borderRadius:999, fontSize:10,
            fontFamily:'Roboto,sans-serif', fontWeight:900,
            background:'rgba(255,255,255,.07)', color:'var(--text-3)' }}>{items.length}</span>
        </div>
        <button onClick={() => onNew(col)}
          style={{ width:22, height:22, borderRadius:5, border:'1px solid var(--app-border)',
            background:'rgba(255,255,255,.04)', color:'var(--text-3)', cursor:'pointer',
            display:'flex', alignItems:'center', justifyContent:'center', transition:'all 130ms' }}
          onMouseEnter={e => { e.currentTarget.style.background='rgba(234,170,65,.12)'; e.currentTarget.style.color='var(--fmn-gold)'; }}
          onMouseLeave={e => { e.currentTarget.style.background='rgba(255,255,255,.04)'; e.currentTarget.style.color='var(--text-3)'; }}>
          <LucideIcon icon="plus" size={12}/>
        </button>
      </div>
      {/* Cards */}
      <div style={{ flex:1, overflowY:'auto', display:'flex', flexDirection:'column', gap:8,
        paddingRight:2, paddingBottom:8 }}>
        {items.length === 0 && (
          <div style={{ padding:'24px 0', textAlign:'center',
            fontSize:11, color:'var(--text-3)', fontFamily:'Roboto,sans-serif' }}>
            Vazio
          </div>
        )}
        {items.map(item => (
          <ContentCard key={item.id} item={item}
            onEdit={onEdit} onDelete={onDelete} onStatusChange={onStatusChange}/>
        ))}
      </div>
    </div>
  );
}

/* ── Modal de criação / edição ───────────────────────────────────*/
const FIELD_STYLE = {
  width:'100%', boxSizing:'border-box',
  background:'rgba(255,255,255,.04)', border:'1px solid rgba(255,255,255,.1)',
  color:'#fff', padding:'10px 12px', borderRadius:8,
  fontFamily:'Roboto,sans-serif', fontSize:13, outline:'none', resize:'vertical',
};
const LABEL_STYLE = {
  display:'block', fontSize:10, fontFamily:'Roboto,sans-serif', fontWeight:700,
  letterSpacing:'1.2px', color:'rgba(255,255,255,.4)', textTransform:'uppercase', marginBottom:6,
};

function ContentModal({ item, onSave, onClose }) {
  const isNew = !item?.id;
  const [form, setForm] = useState(item || {
    tema:'', plataforma:'Reels', responsavel:'Felipe', status:'Fazer',
    gancho:'', desenvolvimento:'', cta:'', data_prevista:'',
  });

  const set = (k, v) => setForm(f => ({ ...f, [k]: v }));

  return (
    <div style={{ position:'fixed', inset:0, background:'rgba(0,0,0,.65)', zIndex:700,
      display:'flex', alignItems:'center', justifyContent:'center', padding:20 }}
      onClick={e => e.target === e.currentTarget && onClose()}>
      <div style={{ background:'var(--app-surface-1)', border:'1px solid var(--app-border)',
        borderRadius:16, width:'100%', maxWidth:560, maxHeight:'90vh',
        display:'flex', flexDirection:'column', overflow:'hidden',
        boxShadow:'0 24px 64px rgba(0,0,0,.5)' }}>

        {/* Header */}
        <div style={{ padding:'18px 20px 16px', borderBottom:'1px solid var(--app-border)',
          display:'flex', alignItems:'center', justifyContent:'space-between', flexShrink:0 }}>
          <span style={{ fontSize:15, fontFamily:'Roboto,sans-serif', fontWeight:900,
            color:'var(--text-1)' }}>{isNew ? 'Novo conteúdo' : 'Editar conteúdo'}</span>
          <button onClick={onClose} style={{ border:'none', background:'transparent',
            color:'var(--text-3)', cursor:'pointer', padding:4 }}>
            <LucideIcon icon="x" size={18}/>
          </button>
        </div>

        {/* Body */}
        <div style={{ flex:1, overflowY:'auto', padding:'20px', display:'flex', flexDirection:'column', gap:16 }}>

          {/* Tema */}
          <div>
            <label style={LABEL_STYLE}>Tema / Título</label>
            <input value={form.tema} onChange={e => set('tema', e.target.value)}
              placeholder="Ex: Cliente diz que achou pouca foto na entrega"
              style={{ ...FIELD_STYLE, resize:'none' }}/>
          </div>

          {/* Plataforma + Responsável lado a lado */}
          <div style={{ display:'grid', gridTemplateColumns:'1fr 1fr', gap:12 }}>
            <div>
              <label style={LABEL_STYLE}>Plataforma</label>
              <div style={{ display:'flex', gap:6, flexWrap:'wrap' }}>
                {PLATAFORMAS.map(p => {
                  const active = form.plataforma === p;
                  const color = PLAT_COLOR[p];
                  return (
                    <button key={p} onClick={() => set('plataforma', p)}
                      style={{ padding:'5px 11px', borderRadius:999, fontSize:11, cursor:'pointer',
                        fontFamily:'Roboto,sans-serif', fontWeight:700, transition:'all 130ms',
                        background: active ? `${color}22` : 'rgba(255,255,255,.04)',
                        border: active ? `1px solid ${color}66` : '1px solid rgba(255,255,255,.1)',
                        color: active ? color : 'var(--text-3)' }}>
                      {p}
                    </button>
                  );
                })}
              </div>
            </div>
            <div>
              <label style={LABEL_STYLE}>Responsável</label>
              <div style={{ display:'flex', gap:6 }}>
                {RESPONSAVEIS.map(r => {
                  const active = form.responsavel === r;
                  const color = r === 'Felipe' ? '#eaaa41' : '#60a5fa';
                  return (
                    <button key={r} onClick={() => set('responsavel', r)}
                      style={{ padding:'5px 14px', borderRadius:999, fontSize:11, cursor:'pointer',
                        fontFamily:'Roboto,sans-serif', fontWeight:700, transition:'all 130ms',
                        background: active ? `${color}22` : 'rgba(255,255,255,.04)',
                        border: active ? `1px solid ${color}66` : '1px solid rgba(255,255,255,.1)',
                        color: active ? color : 'var(--text-3)' }}>
                      {r}
                    </button>
                  );
                })}
              </div>
            </div>
          </div>

          {/* Status */}
          <div>
            <label style={LABEL_STYLE}>Status</label>
            <div style={{ display:'flex', gap:5, flexWrap:'wrap' }}>
              {STATUS_COLS.map(s => {
                const active = form.status === s;
                const color = COL_CFG[s].dot;
                return (
                  <button key={s} onClick={() => set('status', s)}
                    style={{ padding:'5px 12px', borderRadius:999, fontSize:11, cursor:'pointer',
                      fontFamily:'Roboto,sans-serif', fontWeight:700, transition:'all 130ms',
                      background: active ? `${color}22` : 'rgba(255,255,255,.04)',
                      border: active ? `1px solid ${color}66` : '1px solid rgba(255,255,255,.1)',
                      color: active ? color : 'var(--text-3)' }}>
                    {s}
                  </button>
                );
              })}
            </div>
          </div>

          {/* Gancho */}
          <div>
            <label style={LABEL_STYLE}>Gancho</label>
            <textarea value={form.gancho} onChange={e => set('gancho', e.target.value)}
              rows={3} placeholder="A primeira frase que para o scroll..."
              style={FIELD_STYLE}/>
          </div>

          {/* Desenvolvimento */}
          <div>
            <label style={LABEL_STYLE}>Desenvolvimento</label>
            <textarea value={form.desenvolvimento} onChange={e => set('desenvolvimento', e.target.value)}
              rows={5} placeholder="O conteúdo principal, argumentos, pontos do carrossel..."
              style={FIELD_STYLE}/>
          </div>

          {/* CTA */}
          <div>
            <label style={LABEL_STYLE}>CTA</label>
            <textarea value={form.cta} onChange={e => set('cta', e.target.value)}
              rows={2} placeholder="O que você quer que a pessoa faça depois..."
              style={FIELD_STYLE}/>
          </div>

          {/* Data prevista */}
          <div>
            <label style={LABEL_STYLE}>Data prevista de postagem</label>
            <input type="date" value={form.data_prevista || ''} onChange={e => set('data_prevista', e.target.value)}
              style={{ ...FIELD_STYLE, resize:'none', colorScheme:'dark' }}/>
          </div>
        </div>

        {/* Footer */}
        <div style={{ padding:'14px 20px', borderTop:'1px solid var(--app-border)',
          display:'flex', justifyContent:'flex-end', gap:8, flexShrink:0 }}>
          <Btn variant="ghost" size="sm" onClick={onClose}>Cancelar</Btn>
          <Btn variant="primary" size="sm" icon="check" onClick={() => onSave(form)}>
            {isNew ? 'Criar' : 'Salvar'}
          </Btn>
        </div>
      </div>
    </div>
  );
}

/* ── Filtros ─────────────────────────────────────────────────────*/
function FilterPill({ label, active, color, onClick }) {
  return (
    <button onClick={onClick}
      style={{ padding:'5px 12px', borderRadius:999, cursor:'pointer', fontSize:11,
        fontFamily:'Roboto,sans-serif', fontWeight:700, transition:'all 130ms',
        background: active ? (color ? `${color}22` : 'rgba(234,170,65,.15)') : 'rgba(255,255,255,.04)',
        border: active ? `1px solid ${color || 'rgba(234,170,65,.4)'}66` : '1px solid rgba(255,255,255,.1)',
        color: active ? (color || 'var(--fmn-gold)') : 'rgba(255,255,255,.42)' }}>
      {label}
    </button>
  );
}

/* ── OrganicoScreen ──────────────────────────────────────────────*/
function OrganicoScreen() {
  const [items, setItems]               = useState([]);
  const [dbAvailable, setDbAvail]       = useState(false);
  const [modal, setModal]               = useState(null);  // null | { item? }
  const [platFilter, setPlatFilter]     = useState('Todos');
  const [respFilter, setRespFilter]     = useState('Todos');
  const [toast, setToast]               = useState(null);

  /* ── Load ─── */
  useEffect(() => {
    if (!window.db) return;
    setDbAvail(true);
    window.db.from('conteudo_organico')
      .select('*').order('created_at', { ascending: false })
      .then(({ data }) => { if (data) setItems(data); });
  }, []);

  const showToast = msg => { setToast(msg); setTimeout(() => setToast(null), 3500); };

  /* ── CRUD ─── */
  const handleSave = async form => {
    const row = {
      tema: form.tema, plataforma: form.plataforma, responsavel: form.responsavel,
      status: form.status, gancho: form.gancho, desenvolvimento: form.desenvolvimento,
      cta: form.cta, data_prevista: form.data_prevista || null,
    };
    if (form.id) {
      if (dbAvailable) await window.db.from('conteudo_organico').update(row).eq('id', form.id);
      setItems(prev => prev.map(i => i.id === form.id ? { ...i, ...row } : i));
    } else {
      if (dbAvailable) {
        const { data } = await window.db.from('conteudo_organico').insert(row).select().single();
        if (data) { setItems(prev => [data, ...prev]); setModal(null); return; }
      }
      setItems(prev => [{ ...row, id: String(Date.now()) }, ...prev]);
    }
    setModal(null);
  };

  const handleDelete = async id => {
    if (!confirm('Excluir este conteúdo?')) return;
    if (dbAvailable) await window.db.from('conteudo_organico').delete().eq('id', id);
    setItems(prev => prev.filter(i => i.id !== id));
  };

  const handleStatusChange = async (id, newStatus) => {
    if (dbAvailable) await window.db.from('conteudo_organico').update({ status: newStatus }).eq('id', id);
    setItems(prev => prev.map(i => i.id === id ? { ...i, status: newStatus } : i));
    if (newStatus === 'Feito') showToast('Conteúdo marcado como Feito.');
  };

  /* ── Filtros ─── */
  const filtered = items.filter(i => {
    if (platFilter !== 'Todos' && i.plataforma !== platFilter) return false;
    if (respFilter !== 'Todos' && i.responsavel !== respFilter) return false;
    return true;
  });

  return (
    <div style={{ display:'flex', flexDirection:'column', height:'100%', overflow:'hidden' }}>

      {/* Toast */}
      {toast && (
        <div style={{ position:'fixed', bottom:24, left:'50%', transform:'translateX(-50%)', zIndex:800,
          display:'flex', alignItems:'center', gap:8, padding:'12px 18px', borderRadius:10,
          background:'rgba(74,222,128,.12)', border:'1px solid rgba(74,222,128,.3)',
          boxShadow:'0 12px 40px rgba(0,0,0,.5)' }}>
          <LucideIcon icon="check-circle" size={16} color="#4ade80"/>
          <span style={{ fontSize:13, fontFamily:'Roboto,sans-serif', fontWeight:700, color:'#4ade80' }}>{toast}</span>
        </div>
      )}

      {/* Modal */}
      {modal && (
        <ContentModal
          item={modal.item || null}
          onSave={handleSave}
          onClose={() => setModal(null)}/>
      )}

      {/* TopBar */}
      <TopBar title="Orgânico"
        actions={
          <div style={{ display:'flex', alignItems:'center', gap:8, flexWrap:'wrap' }}>

            {/* Filtro plataforma */}
            <div style={{ display:'flex', gap:4, padding:3, borderRadius:8,
              background:'rgba(255,255,255,.04)', border:'1px solid var(--app-border)' }}>
              {['Todos', ...PLATAFORMAS].map(p => (
                <FilterPill key={p} label={p} active={platFilter===p}
                  color={PLAT_COLOR[p]} onClick={() => setPlatFilter(p)}/>
              ))}
            </div>

            <div style={{ width:1, height:20, background:'var(--app-border)' }}/>

            {/* Filtro responsável */}
            <div style={{ display:'flex', gap:4 }}>
              {['Todos', ...RESPONSAVEIS].map(r => (
                <FilterPill key={r} label={r} active={respFilter===r}
                  color={r==='Felipe'?'#eaaa41':r==='Amanda'?'#60a5fa':null}
                  onClick={() => setRespFilter(r)}/>
              ))}
            </div>

            <Btn variant="primary" size="sm" icon="plus"
              onClick={() => setModal({ item: null })}>
              Novo
            </Btn>
          </div>
        }/>

      {/* Board kanban horizontal */}
      <div style={{ flex:1, display:'flex', gap:14, padding:'16px 24px',
        overflowX:'auto', overflowY:'hidden', minHeight:0, alignItems:'stretch' }}>
        {STATUS_COLS.map(col => (
          <OrgColumn
            key={col}
            col={col}
            items={filtered.filter(i => i.status === col)}
            onEdit={item => setModal({ item })}
            onDelete={handleDelete}
            onStatusChange={handleStatusChange}
            onNew={status => setModal({ item: { status } })}/>
        ))}
      </div>
    </div>
  );
}

window.OrganicoScreen = OrganicoScreen;
