/* global React, Card, Badge, Button, Avatar, Icon, ICONS, TemplatesGalleryModal, BriefingWizard, BriefingDetailModal, BM_TEMPLATES, sb */
const { useState: useStateBR, useEffect: useEffectBR } = React;

const BRIEFING_STATUS_MAP = {
  enviado:     { s: 'Aguardando cliente', tone: 'brand' },
  em_revisao:  { s: 'Em revisão',         tone: 'warning' },
  concluido:   { s: 'Concluído',          tone: 'success' },
  rascunho:    { s: 'Rascunho',           tone: 'neutral' },
};

function rowToBriefing(row) {
  const sm = BRIEFING_STATUS_MAP[row.status] || BRIEFING_STATUS_MAP.rascunho;
  const created = row.created_at ? new Date(row.created_at) : null;
  const diffDays = created ? Math.floor((Date.now() - created) / 86400000) : null;
  const when = diffDays === null ? '—' : diffDays === 0 ? 'hoje' : diffDays === 1 ? 'há 1 dia' : `há ${diffDays} dias`;
  return {
    id:        row.id,
    c:         row.client_name || '',
    t:         row.title,
    s:         sm.s,
    tone:      sm.tone,
    q:         '— questões',
    when,
    who:       '',
    tags:      [],
    rawStatus: row.status || 'rascunho',
    createdAt: row.created_at,
  };
}

// Garante que existe uma config no localStorage e a retorna (fallback para briefings antigos)
function ensureBriefingConfig(b) {
  const key = 'inbrivvo_briefing_' + b.id;
  let cfg = null;
  try { cfg = JSON.parse(localStorage.getItem(key) || 'null'); } catch {}
  if (!cfg) {
    cfg = { id: b.id, title: b.t || 'Briefing', client: b.c || '', welcomeMsg: '', questions: [] };
    localStorage.setItem(key, JSON.stringify(cfg));
  }
  return cfg;
}

// Retorna contagem de questões de um briefing (novo formato ou antigo)
function getBriefingQCount(id) {
  try {
    const cfg = JSON.parse(localStorage.getItem('inbrivvo_briefing_' + id) || 'null');
    if (!cfg) return null;
    if (Array.isArray(cfg.questions) && cfg.questions.length > 0) return cfg.questions.length;
    if (Array.isArray(cfg.sections) && cfg.sections.length > 0) return cfg.sections.length;
    return 0;
  } catch { return null; }
}

// Gera URL pública com dados embutidos em base64 — funciona em qualquer browser/dispositivo
function publicBriefingUrl(id, cfg) {
  const base = window.location.href.replace(/[^/]+(\?.*)?$/, '');
  let url = base + 'public-briefing.html?id=' + encodeURIComponent(id);
  if (cfg) {
    try {
      const encoded = btoa(encodeURIComponent(JSON.stringify(cfg)));
      url += '&d=' + encodeURIComponent(encoded);
    } catch {}
  }
  return url;
}

function Briefings({ onNav }) {
  const [modal, setModal] = useStateBR(null); // 'gallery' | 'form' | 'detail'
  const [pickedTemplate, setPickedTemplate] = useStateBR(null);
  const [openBriefing, setOpenBriefing] = useStateBR(null);
  const [briefings, setBriefings] = useStateBR([]);
  const [loading, setLoading] = useStateBR(true);

  useEffectBR(() => {
    (async () => {
      const { data, error } = await sb.from('briefings').select('*').order('created_at', { ascending: false });
      if (error) { window.__toast?.(error.message, { tone:'danger' }); }
      setBriefings((data || []).map(rowToBriefing));
      setLoading(false);
    })();
  }, []);

  const templates = [
    { t:'Branding completo',     n:'18 questões', c:'linear-gradient(135deg,#1D39C4,#36CFC9)' },
    { t:'Site / Landing page',   n:'12 questões', c:'linear-gradient(135deg,#FA541C,#FADB14)' },
    { t:'Campanha de lançamento',n:'14 questões', c:'linear-gradient(135deg,#7C3AED,#1D39C4)' },
    { t:'Embalagem',             n:'10 questões', c:'linear-gradient(135deg,#22C55E,#36CFC9)' },
  ];
  const [tab, setTab] = useStateBR('ativos');

  const oneWeekAgo     = Date.now() - 7 * 86400000;
  const enviadosSemana = briefings.filter(b => b.createdAt && new Date(b.createdAt) >= new Date(oneWeekAgo)).length;
  const respondidos    = briefings.filter(b => b.rawStatus === 'em_revisao' || b.rawStatus === 'concluido').length;
  const concluidos     = briefings.filter(b => b.rawStatus === 'concluido').length;
  const taxaConclusao  = briefings.length > 0 ? Math.round(concluidos / briefings.length * 100) : 0;

  const TAB_STATUS = {
    'ativos':      b => b.rawStatus === 'enviado' || b.rawStatus === 'em_revisao',
    'concluídos':  b => b.rawStatus === 'concluido',
    'rascunhos':   b => b.rawStatus === 'rascunho',
  };
  const visibleBriefings = briefings.filter(TAB_STATUS[tab] || (() => true));

  async function handleDelete(b) {
    if (!window.confirm(`Excluir o briefing "${b.t}"? Esta ação não pode ser desfeita.`)) return;
    try {
      const { error } = await sb.from('briefings').delete().eq('id', b.id);
      if (error) { window.__toast?.(error.message, { tone:'danger' }); return; }
      localStorage.removeItem('inbrivvo_briefing_' + b.id);
      localStorage.removeItem('inbrivvo_resp_'     + b.id);
      setBriefings(prev => prev.filter(x => x.id !== b.id));
      window.__toast?.('Briefing excluído', { tone:'success' });
    } catch { window.__toast?.('Erro ao excluir', { tone:'danger' }); }
  }

  return (
    <div style={{ padding:'24px 28px', display:'flex', flexDirection:'column', gap:18 }}>
      <Card padding={22} style={{
        background:'linear-gradient(135deg, rgba(124,58,237,0.18) 0%, rgba(29,57,196,0.10) 60%, transparent 100%), var(--bg-surface)',
        borderColor:'var(--geek-blue-a40)',
      }}>
        <div style={{ display:'flex', alignItems:'center', gap:18 }}>
          <div style={{ flex:1 }}>
            <div style={{ fontFamily:'var(--font-display)', fontSize:11, fontWeight:700, letterSpacing:'0.06em', textTransform:'uppercase', color:'var(--geek-blue-300)' }}>Briefings inteligentes</div>
            <h2 style={{ margin:'4px 0 0', fontSize:22, fontWeight:700 }}>Capture o essencial. O cliente preenche, você produz.</h2>
            <p style={{ margin:'6px 0 0', color:'var(--fg-secondary)', fontSize:14 }}>Crie a partir de um modelo, envie por link público e receba respostas estruturadas — prontas para virar projeto.</p>
          </div>
          <Button variant="secondary" icon="page" onClick={()=>setModal('gallery')}>Modelos</Button>
          <Button icon="plus" onClick={()=>{ setPickedTemplate(null); setModal('form'); }}>Novo briefing</Button>
        </div>
      </Card>

      <div style={{ display:'grid', gridTemplateColumns:'1.6fr 1fr', gap:16 }}>
        <Card padding={0}>
          <div style={{ display:'flex', alignItems:'center', gap:8, padding:'14px 18px', borderBottom:'1px solid var(--border-subtle)' }}>
            {['ativos','concluídos','rascunhos'].map(k => (
              <button key={k} onClick={()=>setTab(k)} style={{
                background: tab===k ? 'var(--primary-soft)' : 'transparent',
                color: tab===k ? 'var(--geek-blue-200)' : 'var(--fg-secondary)',
                border:'1px solid', borderColor: tab===k ? 'var(--geek-blue-a40)' : 'transparent',
                padding:'6px 12px', borderRadius:8, fontSize:12, fontWeight:600, textTransform:'capitalize', cursor:'pointer',
              }}>{k}</button>
            ))}
            <div style={{ flex:1 }}/>
            <span style={{ fontSize:11, color:'var(--fg-muted)' }}>{loading ? '…' : visibleBriefings.length} briefings</span>
          </div>
          {loading && <div style={{ padding:'32px 0', textAlign:'center', color:'var(--fg-muted)', fontSize:13 }}>Carregando briefings…</div>}
          {!loading && visibleBriefings.length === 0 && <div style={{ padding:'32px 18px', textAlign:'center', color:'var(--fg-muted)', fontSize:13 }}>Nenhum briefing ainda. Clique em "Novo briefing" para começar.</div>}
          {visibleBriefings.map((b,i) => (
            <div key={b.id || i} style={{
              padding:'16px 18px', borderBottom: i<visibleBriefings.length-1 ? '1px solid var(--border-subtle)' : 'none',
              display:'grid', gridTemplateColumns:'1fr auto', gap:12, alignItems:'center',
            }}>
              <div style={{ minWidth:0 }}>
                <div style={{ display:'flex', alignItems:'center', gap:10 }}>
                  <span style={{ fontFamily:'var(--font-display)', fontSize:10, fontWeight:700, letterSpacing:'0.06em', textTransform:'uppercase', color:'var(--fg-muted)' }}>{b.c}</span>
                  <Badge tone={b.tone}>{b.s}</Badge>
                </div>
                <div style={{ fontSize:15, fontWeight:700, marginTop:4 }}>{b.t}</div>
                <div style={{ display:'flex', gap:14, marginTop:8, alignItems:'center', fontSize:12, color:'var(--fg-muted)' }}>
                  <span style={{ fontFamily:'var(--font-mono)' }}>{(()=>{ const n = getBriefingQCount(b.id); return n === null ? '— questões' : n === 1 ? '1 questão' : `${n} questões`; })()}</span>
                  <span>•</span>
                  <span>atualizado {b.when}</span>
                  <span>•</span>
                  <span style={{ display:'inline-flex', alignItems:'center', gap:6 }}>
                    <Avatar name={b.who} size={18} idx={i}/> {b.who}
                  </span>
                </div>
                <div style={{ display:'flex', gap:6, marginTop:10 }}>
                  {b.tags.map(tg => <Badge key={tg} tone="neutral" dot={false}>{tg}</Badge>)}
                </div>
              </div>
              <div style={{ display:'flex', gap:8 }}>
                <Button variant="ghost" size="sm" onClick={()=>{
                  const cfg = ensureBriefingConfig(b);
                  navigator.clipboard?.writeText(publicBriefingUrl(b.id, cfg));
                  window.__toast?.('Link copiado!', { tone:'success' });
                }}>Copiar link</Button>
                <Button variant="ghost" size="sm" onClick={()=>{
                  const cfg = ensureBriefingConfig(b);
                  window.open(publicBriefingUrl(b.id, cfg), '_blank');
                }}>Ver link ↗</Button>
                <Button variant="secondary" size="sm" onClick={()=>{ setOpenBriefing(b); setModal('detail'); }}>Abrir →</Button>
                <button onClick={()=>handleDelete(b)} title="Excluir briefing" style={{
                  background:'transparent', border:'1px solid var(--border-subtle)', borderRadius:6,
                  color:'var(--fg-muted)', cursor:'pointer', padding:'4px 8px', fontSize:14,
                  display:'flex', alignItems:'center', transition:'all 160ms',
                }} onMouseOver={e=>{e.currentTarget.style.background='rgba(239,68,68,0.1)';e.currentTarget.style.color='#EF4444';e.currentTarget.style.borderColor='#EF4444';}} onMouseOut={e=>{e.currentTarget.style.background='transparent';e.currentTarget.style.color='var(--fg-muted)';e.currentTarget.style.borderColor='var(--border-subtle)';}}>
                  🗑
                </button>
              </div>
            </div>
          ))}
        </Card>

        <div style={{ display:'flex', flexDirection:'column', gap:16 }}>
          <Card>
            <div style={{ display:'flex', alignItems:'center', gap:10, marginBottom:14 }}>
              <Icon d={ICONS.bolt} size={16} style={{ color:'var(--geek-blue-300)' }}/>
              <h3 style={{ margin:0, fontSize:14, fontWeight:700 }}>Modelos prontos</h3>
            </div>
            <div style={{ display:'flex', flexDirection:'column', gap:10 }}>
              {templates.map((t,i) => (
                <div key={i} onClick={()=>{ const tpl = (BM_TEMPLATES||[]).find(x=>x.t===t.t) || { t:t.t, n:parseInt(t.n)||0, c:t.c, tag:'Custom', d:'' }; setPickedTemplate(tpl); setModal('form'); }} style={{ display:'flex', alignItems:'center', gap:12, padding:10, borderRadius:10, background:'var(--bg-elevated)', cursor:'pointer' }}>
                  <div style={{ width:38, height:38, borderRadius:8, background:t.c }}/>
                  <div style={{ flex:1, minWidth:0 }}>
                    <div style={{ fontSize:13, fontWeight:600 }}>{t.t}</div>
                    <div style={{ fontSize:11, color:'var(--fg-muted)' }}>{t.n}</div>
                  </div>
                  <Icon d={ICONS.arrowR} size={14} style={{ color:'var(--fg-muted)' }}/>
                </div>
              ))}
            </div>
          </Card>

          <Card>
            <div style={{ fontFamily:'var(--font-display)', fontSize:10, fontWeight:700, letterSpacing:'0.06em', textTransform:'uppercase', color:'var(--fg-muted)' }}>Esta semana</div>
            <div style={{ display:'flex', justifyContent:'space-between', marginTop:10 }}>
              <div>
                <div style={{ fontFamily:'var(--font-display)', fontSize:32, fontWeight:700, letterSpacing:'-0.03em' }}>{enviadosSemana}</div>
                <div style={{ fontSize:11, color:'var(--fg-muted)' }}>esta semana</div>
              </div>
              <div>
                <div style={{ fontFamily:'var(--font-display)', fontSize:32, fontWeight:700, letterSpacing:'-0.03em', color:'var(--accent-success, #22C55E)' }}>{respondidos}</div>
                <div style={{ fontSize:11, color:'var(--fg-muted)' }}>respondidos</div>
              </div>
              <div>
                <div style={{ fontFamily:'var(--font-display)', fontSize:32, fontWeight:700, letterSpacing:'-0.03em', color:'var(--geek-blue-300)' }}>{taxaConclusao}%</div>
                <div style={{ fontSize:11, color:'var(--fg-muted)' }}>conclusão</div>
              </div>
            </div>
          </Card>
        </div>
      </div>

      {modal==='gallery' && <TemplatesGalleryModal onClose={()=>setModal(null)}
        onPick={(tpl)=>{ setPickedTemplate(tpl); setModal('form'); }}
        onCreateBlank={()=>{ setPickedTemplate(null); setModal('form'); }}/>}

      {modal==='form' && <BriefingWizard template={pickedTemplate} onClose={()=>setModal(null)}
        onCreate={async (f)=>{
          try {
            const { data: { user } } = await sb.auth.getUser();
            const { data: row, error } = await sb.from('briefings').insert({
              user_id:     user.id,
              title:       f.title || f.t || 'Novo briefing',
              client_name: f.client || '',
              status:      'enviado',
            }).select().single();
            if (error) { window.__toast?.(error.message, { tone:'danger' }); return; }

            // Salvar config completa no localStorage para a página pública
            localStorage.setItem('inbrivvo_briefing_' + row.id, JSON.stringify({
              id:         row.id,
              title:      f.title || row.title,
              client:     f.client || row.client_name || '',
              welcomeMsg: f.welcomeMsg || '',
              questions:  f.questions || [],
            }));

            setBriefings(prev => [rowToBriefing(row), ...prev]);
            const cfg = JSON.parse(localStorage.getItem('inbrivvo_briefing_' + row.id) || 'null');
            navigator.clipboard?.writeText(publicBriefingUrl(row.id, cfg));
            window.__toast?.('Briefing criado · link copiado!', { tone:'success' });
          } catch { window.__toast?.('Erro ao criar briefing', { tone:'danger' }); }
          setModal(null);
        }}/>}

      {modal==='detail' && <BriefingDetailModal briefing={openBriefing} onClose={()=>setModal(null)}/>}
    </div>
  );
}
window.Briefings = Briefings;
