import { describe, expect, it } from 'vitest';
import { paperIndexCompatibility } from './compatibility';
import type { PaperIndexGeneration } from './types';

function generation(): PaperIndexGeneration {
  return {
    schemaVersion: 1,
    extractorVersion: 'pdfjs-scientific-v1',
    chunkingVersion: 'scientific-400-900-v1',
    generationId: 'g1',
    paperId: 'p1',
    createdAt: 1,
    pages: [],
    blocks: [],
    chunks: [{ id: 'c1', paperId: 'p1', kind: 'paragraph', text: 'Evidence', pageStart: 2, pageEnd: 2, contentHash: 'a'.repeat(64) }],
  };
}

describe('Paper Memory index compatibility', () => {
  it('accepts the current structural index', () => {
    expect(paperIndexCompatibility(generation())).toEqual({ status: 'compatible' });
  });

  it('requires re-indexing for changed extractor/chunker versions without deleting the source PDF', () => {
    expect(paperIndexCompatibility({ ...generation(), extractorVersion: 'legacy-pdfjs' as never }).status).toBe('reindex-required');
    expect(paperIndexCompatibility({ ...generation(), chunkingVersion: 'legacy-chunker' as never }).status).toBe('reindex-required');
  });

  it('rejects invalid page provenance', () => {
    const current = generation();
    expect(paperIndexCompatibility({ ...current, chunks: [{ ...current.chunks[0]!, pageStart: 0 }] }).status).toBe('reindex-required');
  });
});
