/**
 * PR6 - documents hub `eoi_queue` tab.
 *
 * Verifies that:
 * - `listDocuments` with tab='eoi_queue' returns only EOI docs in
 *   draft/sent/partially_signed status
 * - Other doc types (NDA, contract, welcome_letter) are excluded
 * - Completed/expired EOIs are excluded (those belong to other tabs)
 *
 * (Note: `getHubTabCounts` and the /hub-counts route were removed when the
 * hub rebuild dropped the count-strip KPI surface - the count assertions
 * that used to live here went with them.)
 */

import { describe, it, expect } from 'vitest';

import { db } from '@/lib/db';
import { documents } from '@/lib/db/schema/documents';
import { listDocuments } from '@/lib/services/documents.service';
import { makePort, makeClient } from '../helpers/factories';

describe('documents hub - eoi_queue tab', () => {
  it('lists only EOIs in in-flight status', async () => {
    const port = await makePort();
    const client = await makeClient({ portId: port.id });

    // Seed a mix: 2 in-flight EOIs, 1 completed EOI, 1 sent NDA, 1 sent welcome_letter.
    await db.insert(documents).values([
      {
        portId: port.id,
        clientId: client.id,
        documentType: 'eoi',
        title: 'EOI #1',
        status: 'sent',
        createdBy: 'seed',
      },
      {
        portId: port.id,
        clientId: client.id,
        documentType: 'eoi',
        title: 'EOI #2',
        status: 'partially_signed',
        createdBy: 'seed',
      },
      {
        portId: port.id,
        clientId: client.id,
        documentType: 'eoi',
        title: 'EOI #3 (done)',
        status: 'completed',
        createdBy: 'seed',
      },
      {
        portId: port.id,
        clientId: client.id,
        documentType: 'nda',
        title: 'NDA',
        status: 'sent',
        createdBy: 'seed',
      },
      {
        portId: port.id,
        clientId: client.id,
        documentType: 'welcome_letter',
        title: 'Welcome',
        status: 'sent',
        createdBy: 'seed',
      },
    ]);

    const result = await listDocuments(
      port.id,
      {
        page: 1,
        limit: 50,
        sort: 'createdAt',
        order: 'desc',
        includeArchived: false,
        tab: 'eoi_queue',
      },
      {},
    );

    const docs = result.data as Array<{ documentType: string; status: string }>;
    expect(docs).toHaveLength(2);
    expect(docs.every((d) => d.documentType === 'eoi')).toBe(true);
    expect(docs.every((d) => ['sent', 'partially_signed'].includes(d.status))).toBe(true);
  });

  it('returns an empty list when no in-flight EOIs exist', async () => {
    const port = await makePort();
    const client = await makeClient({ portId: port.id });
    await db.insert(documents).values({
      portId: port.id,
      clientId: client.id,
      documentType: 'eoi',
      title: 'old EOI',
      status: 'expired',
      createdBy: 'seed',
    });

    const result = await listDocuments(
      port.id,
      {
        page: 1,
        limit: 50,
        sort: 'createdAt',
        order: 'desc',
        includeArchived: false,
        tab: 'eoi_queue',
      },
      {},
    );
    expect(result.data).toHaveLength(0);
  });
});
