const BIB_CATS = ['Certidões', 'Atestados', 'Contratos', 'Procurações', 'ARTs'];
const BIB_SLUG = { 'Certidões': 'certidoes', Atestados: 'atestados', Contratos: 'contratos', 'Procurações': 'procuracoes', ARTs: 'arts' };
const BIB_TODAY = new Date(2026, 8, 28);
const bibValidity = s => {
  if (!s) return { label: 'Sem validade', color: 'var(--text-subtle)', flag: false };
  const [d, m, y] = s.split('/').map(Number), days = Math.round((new Date(y, m - 1, d) - BIB_TODAY) / 86400000);
  if (days < 0) return { label: 'Vencido em ' + s, color: 'var(--status-danger)', flag: true };
  if (days <= 30) return { label: 'Vence em ' + days + ' dias', color: 'var(--status-warning)', flag: true };
  return { label: 'Até ' + s, color: 'var(--text-secondary)', flag: false };
};
const bibD = (id, title, cat, tags, val, versions, ocr) => ({ id, title, cat, tags, val, versions, ocr, file: title.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 40) });
const bibV = (n, date, note) => ({ n, date, note });
const BIB_SEED = [
  bibD(1, 'CND Federal (RFB/PGFN)', 'Certidões', ['Federal', 'Regularidade fiscal'], '18/10/2026', [bibV(3, '20/04/2026', 'Renovação semestral'), bibV(2, '21/10/2025', 'Renovação'), bibV(1, '22/04/2025', 'Primeiro envio')], 'Certidão positiva com efeitos de negativa de débitos relativos aos tributos federais e à dívida ativa da União. Contribuinte: Vértice Operações e Soluções Ltda. Validade de 180 dias a contar da emissão.'),
  bibD(2, 'CND Estadual — São Paulo', 'Certidões', ['Estadual', 'Regularidade fiscal'], '02/12/2026', [bibV(2, '05/06/2026', 'Renovação'), bibV(1, '03/12/2025', 'Primeiro envio')], 'Certidão negativa de débitos tributários da dívida ativa do Estado de São Paulo. Não constam débitos inscritos em nome do contribuinte.'),
  bibD(3, 'Certificado de Regularidade do FGTS', 'Certidões', ['FGTS', 'Trabalhista'], '09/10/2026', [bibV(5, '10/09/2026', 'Renovação mensal'), bibV(4, '11/08/2026', 'Renovação mensal')], 'A Caixa Econômica Federal certifica que o empregador encontra-se em situação regular perante o Fundo de Garantia do Tempo de Serviço - FGTS.'),
  bibD(4, 'CND Municipal — Campinas', 'Certidões', ['Municipal', 'Regularidade fiscal'], '20/09/2026', [bibV(1, '22/03/2026', 'Primeiro envio')], 'Certidão negativa de débitos mobiliários emitida pela Prefeitura Municipal de Campinas. Validade de 180 dias.'),
  bibD(5, 'CNDT — Débitos Trabalhistas', 'Certidões', ['Trabalhista', 'TST'], '25/03/2027', [bibV(2, '26/09/2026', 'Renovação'), bibV(1, '27/03/2026', 'Primeiro envio')], 'Certidão negativa de débitos trabalhistas emitida pelo Tribunal Superior do Trabalho. Não constam inadimplementos no Banco Nacional de Devedores Trabalhistas.'),
  bibD(6, 'Atestado — Pavimentação Av. das Amoreiras', 'Atestados', ['Pavimentação', 'Campinas', '2025'], '', [bibV(1, '14/02/2026', 'Primeiro envio')], 'Atestamos que a empresa executou serviços de pavimentação asfáltica em 18.400 m² na Av. das Amoreiras, Campinas/SP, entre março e novembro de 2025, com qualidade satisfatória.'),
  bibD(7, 'Atestado — Reforma UBS Jardim Europa', 'Atestados', ['Reforma', 'Saúde', 'Sorocaba'], '', [bibV(1, '02/05/2026', 'Primeiro envio')], 'Atestamos a execução da reforma e ampliação da Unidade Básica de Saúde Jardim Europa, em Sorocaba/SP, com área construída de 640 m².'),
  bibD(8, 'Contrato 118/2025 — Prefeitura de Jundiaí', 'Contratos', ['Drenagem', 'Jundiaí', '2025'], '30/06/2027', [bibV(2, '12/01/2026', 'Termo aditivo de prazo'), bibV(1, '15/07/2025', 'Contrato original')], 'Contrato de prestação de serviços de drenagem urbana e microdrenagem firmado entre o Município de Jundiaí e a contratada, pelo valor global de R$ 2.180.000,00.'),
  bibD(9, 'Procuração — Vinicius Duque', 'Procurações', ['Representante legal'], '31/12/2026', [bibV(1, '05/01/2026', 'Primeiro envio')], 'Outorgante nomeia e constitui seu procurador Vinicius Duque, Head de Operações, com poderes para representá-la em licitações, assinar propostas, declarações e interpor recursos.'),
  bibD(10, 'ART 28027230241 — Pavimentação Campinas', 'ARTs', ['CREA-SP', 'Pavimentação'], '', [bibV(1, '03/03/2025', 'Primeiro envio')], 'Anotação de Responsabilidade Técnica de obra ou serviço. Responsável técnico: Eng. Ana Beatriz Souza. Atividade: execução de pavimentação asfáltica.'),
  bibD(11, 'ART 28027230377 — Drenagem Jundiaí', 'ARTs', ['CREA-SP', 'Drenagem'], '', [bibV(1, '20/07/2025', 'Primeiro envio')], 'Anotação de Responsabilidade Técnica referente à execução de obras de drenagem urbana no Município de Jundiaí. Responsável técnico: Eng. Thiago Nogueira.'),
];
const bibGuess = n => { n = n.toLowerCase(); if (/cnd|certid|fgts|cndt/.test(n)) return 'Certidões'; if (/atestad/.test(n)) return 'Atestados'; if (/procura/.test(n)) return 'Procurações'; if (/\bart\b|art[_-]/.test(n)) return 'ARTs'; return 'Contratos'; };
function BibTag({ children }) { return <span style={{ fontSize: 11, padding: '3px 8px', borderRadius: 6, background: 'var(--action-primary-tint)', color: 'var(--action-selected-icon)' }}>{children}</span>; }
function BibliotecaScreen() {
  const { SubNav, Input } = window.VRticeDesignSystem_d763eb;
  const [docs, setDocs] = React.useState(BIB_SEED);
  const [cat, setCat] = React.useState(''), [q, setQ] = React.useState(''), [open, setOpen] = React.useState(null);
  const upd = (id, fn) => setDocs(ds => ds.map(d => d.id === id ? fn(d) : d));
  const qq = q.trim().toLowerCase(), expiring = cat === '__exp';
  const list = docs.filter(d => (expiring ? bibValidity(d.val).flag : !cat || d.cat === cat) && (!qq || (d.title + ' ' + d.tags.join(' ') + ' ' + d.ocr).toLowerCase().includes(qq)));
  const snippet = d => { if (d.processing) return 'Processando OCR e gerando tags…'; if (!qq) return d.ocr.slice(0, 90) + '…'; const i = d.ocr.toLowerCase().indexOf(qq); return i < 0 ? 'Encontrado no título ou nas tags' : '…' + d.ocr.slice(Math.max(0, i - 40), i + qq.length + 50) + '…'; };
  const doc = open ? docs.find(d => d.id === open) : null;
  const upload = e => {
    const fl = e.target.files && e.target.files[0]; if (!fl) return;
    const id = Date.now(), c = bibGuess(fl.name), title = fl.name.replace(/\.pdf$/i, '').replace(/[_-]+/g, ' ');
    setDocs(ds => [{ ...bibD(id, title, c, [], '', [bibV(1, '28/09/2026', 'Primeiro envio')], ''), processing: true }, ...ds]);
    setTimeout(() => upd(id, d => ({ ...d, processing: false, tags: [c.replace(/s$/, ''), '2026', 'OCR'], ocr: 'Texto reconhecido de ' + fl.name + '. Conteúdo disponível para busca em todos os campos.' })), 1800);
  };
  const ocrSegs = !doc ? [] : !qq ? [doc.ocr] : doc.ocr.split(new RegExp('(' + qq.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')', 'ig')).filter(Boolean);
  const grid = 'minmax(260px,2.4fr) 120px minmax(160px,1.4fr) 60px 150px';
  return (
    <div style={{ display: 'flex', minHeight: 'calc(100vh - 104px)' }}>
      <SubNav value={cat} onChange={id => { setCat(id); setOpen(null); }} sections={[
        { title: 'CATEGORIAS', items: [{ id: '', label: 'Todos', count: docs.length }, ...BIB_CATS.map(c => ({ id: c, label: c, count: docs.filter(d => d.cat === c).length }))] },
        { title: 'ATENÇÃO', items: [{ id: '__exp', label: 'Vencendo ou vencidos', count: docs.filter(d => bibValidity(d.val).flag).length, tone: 'warning' }] },
      ]} />
      <div style={{ flex: '1 1 0', minWidth: 0, padding: 40, boxSizing: 'border-box', maxWidth: 1480, margin: '0 auto' }}>
        {!doc ? (
          <div style={{ display: 'flex', flexDirection: 'column', gap: 28 }}>
            <DemoNotice>Os documentos, validades e o resultado de leitura desta biblioteca são exemplos. O envio de arquivos ainda não grava nem lê o conteúdo; para ler um edital de verdade use o Intelligence Hub.</DemoNotice>
            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', gap: 24, flexWrap: 'wrap' }}>
              <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
                <span style={{ fontSize: 12, letterSpacing: '0.2em', color: 'var(--text-accent)' }}>BIBLIOTECA DOCUMENTAL</span>
                <h1 style={{ margin: 0, fontSize: 40, fontWeight: 600, letterSpacing: '-0.03em' }}>{expiring ? 'Vencendo ou vencidos' : cat || 'Todos os documentos'}</h1>
              </div>
              <label className="vx-btn vx-btn--primary vx-btn--md">+ Enviar PDF<input type="file" accept="application/pdf" onChange={upload} style={{ display: 'none' }} /></label>
            </div>
            <Input size="lg" placeholder="Buscar no conteúdo dos documentos (ex.: pavimentação, FGTS, 2025)" value={q} onChange={e => setQ(e.target.value)} inputStyle={{ background: 'var(--surface-flat)', borderColor: 'var(--border-default)' }} />
            <div style={{ display: 'flex', flexDirection: 'column', overflowX: 'auto' }}>
              <div style={{ display: 'grid', gridTemplateColumns: grid, gap: 16, padding: '0 12px 10px', fontSize: 11, letterSpacing: '0.14em', color: 'var(--text-subtle)', borderBottom: '1px solid var(--border-subtle)', minWidth: 760 }}><span>NOME</span><span>CATEGORIA</span><span>TAGS</span><span>VERSÃO</span><span>VALIDADE</span></div>
              {list.map(d => { const v = bibValidity(d.val); return (
                <button key={d.id} className="vx-row" onClick={() => setOpen(d.id)} style={{ gridTemplateColumns: grid, gap: 16, alignItems: 'start', padding: 12, minWidth: 760 }}>
                  <span style={{ display: 'flex', flexDirection: 'column', gap: 4, minWidth: 0 }}><span style={{ fontSize: 14, fontWeight: 500 }}>{d.title}</span><span style={{ fontSize: 12, color: 'var(--text-muted)', lineHeight: 1.5 }}>{snippet(d)}</span></span>
                  <span style={{ fontSize: 13, color: 'var(--text-secondary)' }}>{d.cat}</span>
                  <span style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>{d.tags.map(t => <BibTag key={t}>{t}</BibTag>)}</span>
                  <span style={{ fontFamily: 'var(--font-mono)', fontSize: 12, color: 'var(--text-muted)' }}>v{d.versions[0].n}</span>
                  <span style={{ fontSize: 12, color: v.color }}>{d.processing ? '—' : v.label}</span>
                </button>); })}
              {!list.length && <span style={{ padding: '32px 12px', fontSize: 14, color: 'var(--text-muted)' }}>Nada encontrado para essa busca.</span>}
            </div>
          </div>
        ) : (() => { const v = bibValidity(doc.val), curV = doc.versions[0]; const props = [['Categoria', doc.cat, 'var(--text-primary)'], ['Validade', v.label, v.color], ['Versão atual', 'v' + curV.n + ' · enviada em ' + curV.date, 'var(--text-primary)']]; return (
          <div style={{ display: 'flex', flexDirection: 'column', gap: 28, maxWidth: 820 }}>
            <button onClick={() => setOpen(null)} className="vx-crumb" style={{ alignSelf: 'flex-start', cursor: 'pointer', fontFamily: 'inherit', fontSize: 13, background: 'transparent', border: 'none', padding: '4px 0' }}>← Biblioteca / {doc.cat}</button>
            <div style={{ width: 56, height: 68, borderRadius: 8, background: 'var(--action-primary-tint)', border: '1px solid rgba(59,130,246,0.35)', display: 'flex', alignItems: 'flex-end', justifyContent: 'center', paddingBottom: 10, boxSizing: 'border-box', fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--action-selected-icon)' }}>PDF</div>
            <input value={doc.title} aria-label="Título do documento" onChange={e => { const t = e.target.value; upd(doc.id, d => ({ ...d, title: t })); }} style={{ fontFamily: 'inherit', fontSize: 38, fontWeight: 700, letterSpacing: '-0.02em', color: 'var(--text-primary)', background: 'transparent', border: 'none', outline: 'none', padding: 0, width: '100%' }} />
            <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
              {props.map(([k, val, c]) => <div key={k} style={{ display: 'grid', gridTemplateColumns: '180px minmax(0,1fr)', gap: 16, padding: '8px 0', fontSize: 14 }}><span style={{ color: 'var(--text-subtle)' }}>{k}</span><span style={{ color: c }}>{val}</span></div>)}
              <div style={{ display: 'grid', gridTemplateColumns: '180px minmax(0,1fr)', gap: 16, padding: '8px 0', fontSize: 14 }}><span style={{ color: 'var(--text-subtle)' }}>Arquivo (Storage)</span><span style={{ fontFamily: 'var(--font-mono)', fontSize: 12, color: 'var(--text-muted)', overflowWrap: 'anywhere' }}>{'documentos/' + BIB_SLUG[doc.cat] + '/' + doc.file + '-v' + curV.n + '.pdf'}</span></div>
              <div style={{ display: 'grid', gridTemplateColumns: '180px minmax(0,1fr)', gap: 16, padding: '8px 0', fontSize: 14, alignItems: 'center' }}><span style={{ color: 'var(--text-subtle)' }}>Tags automáticas</span><span style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>{doc.tags.map(t => <BibTag key={t}>{t}</BibTag>)}</span></div>
            </div>
            <div style={{ height: 1, background: 'var(--border-subtle)' }} />
            <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
              <span style={{ fontSize: 18, fontWeight: 600, letterSpacing: '-0.01em' }}>Texto extraído (OCR)</span>
              <p style={{ margin: 0, fontSize: 15, lineHeight: 1.75, color: 'var(--text-secondary)', background: 'var(--surface-flat)', border: '1px solid var(--border-faint)', borderRadius: 12, padding: '20px 24px' }}>{ocrSegs.map((t, i) => <span key={i} style={qq && t.toLowerCase() === qq ? { background: 'rgba(56,189,248,0.3)', color: 'var(--text-primary)', borderRadius: 3 } : undefined}>{t}</span>)}</p>
            </div>
            <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
              <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
                <span style={{ fontSize: 18, fontWeight: 600, letterSpacing: '-0.01em' }}>Versões</span>
                <label style={{ cursor: 'pointer', fontSize: 13, color: 'var(--text-link)' }}>+ Enviar nova versão<input type="file" accept="application/pdf" style={{ display: 'none' }} onChange={e => { const fl = e.target.files && e.target.files[0]; if (fl) upd(doc.id, d => ({ ...d, versions: [bibV(d.versions[0].n + 1, '28/09/2026', 'Nova versão: ' + fl.name), ...d.versions] })); }} /></label>
              </div>
              {doc.versions.map((x, i) => <div key={x.n} style={{ display: 'grid', gridTemplateColumns: '56px minmax(0,1fr) auto', gap: 16, alignItems: 'center', padding: '10px 12px', borderRadius: 8, background: i === 0 ? 'var(--action-primary-tint)' : 'transparent' }}><span style={{ fontFamily: 'var(--font-mono)', fontSize: 13, color: i === 0 ? 'var(--action-selected-icon)' : 'var(--text-muted)' }}>v{x.n}</span><span style={{ fontSize: 14, color: 'var(--text-secondary)' }}>{x.note}{i === 0 ? ' · atual' : ''}</span><span style={{ fontSize: 12, color: 'var(--text-subtle)' }}>{x.date}</span></div>)}
            </div>
          </div>); })()}
      </div>
    </div>
  );
}
window.BibliotecaScreen = BibliotecaScreen;
