import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';

describe('phase 6 api contract', () => {
  it('documents scheduler, queue and admin node routes', () => {
    const files = [
      'scheduling/scheduling.service.ts',
      'admin/admin-nodes.controller.ts',
      'admin/admin-nodes.service.ts',
    ];

    for (const file of files) {
      const source = readFileSync(join(process.cwd(), 'src', file), 'utf8');
      assert.ok(source.length > 0, `${file} should exist`);
    }

    const adminSource = readFileSync(
      join(process.cwd(), 'src', 'admin/admin-nodes.controller.ts'),
      'utf8',
    );
    assert.ok(adminSource.includes("@Get()"));
    assert.ok(adminSource.includes(':id/drain'));
    assert.ok(adminSource.includes(':id/maintenance'));

    const schedulingSource = readFileSync(
      join(process.cwd(), 'src', 'scheduling/scheduling.service.ts'),
      'utf8',
    );
    assert.ok(schedulingSource.includes('enqueueStart'));
    assert.ok(schedulingSource.includes('getQueuePosition'));

    const serversSource = readFileSync(
      join(process.cwd(), 'src', 'servers/servers.controller.ts'),
      'utf8',
    );
    assert.ok(serversSource.includes('start-queue'));
    assert.ok(serversSource.includes('cancel-queue'));
  });
});
