import { describe, it, expect } from 'vitest';
import { parseDuoLookup } from './duo.adapter';

const valid = {
  diplomas: [
    {
      id: 'd1',
      naam: 'Geneeskunde',
      instelling: 'Universiteit Leiden',
      jaar: 2011,
      beroep: 'Arts',
      policyQuestions: [],
    },
    {
      id: 'd2',
      naam: 'Medicine',
      instelling: 'University of Edinburgh',
      jaar: 2013,
      beroep: 'Arts',
      policyQuestions: [{ id: 'nl-taal', vraag: 'Toon taalvaardigheid', type: 'ja-nee' }],
    },
  ],
  handmatig: {
    beroepen: ['Arts', 'Verpleegkundige'],
    policyQuestions: [{ id: 'toelichting', vraag: 'Toelichting', type: 'tekst' }],
  },
};

describe('parseDuoLookup (trust boundary)', () => {
  it('maps a valid lookup (diplomas + manual fallback)', () => {
    const r = parseDuoLookup(valid);
    expect(r.ok).toBe(true);
    if (r.ok) {
      expect(r.value.diplomas).toHaveLength(2);
      expect(r.value.diplomas[1].policyQuestions[0].id).toBe('nl-taal');
      expect(r.value.handmatig.beroepen).toContain('Verpleegkundige');
      expect(r.value.handmatig.policyQuestions[0].type).toBe('tekst');
    }
  });

  it('accepts an empty diploma list (forces manual entry)', () => {
    const r = parseDuoLookup({ diplomas: [], handmatig: valid.handmatig });
    expect(r.ok).toBe(true);
  });

  it('rejects malformed responses', () => {
    expect(parseDuoLookup(null).ok).toBe(false);
    expect(parseDuoLookup({}).ok).toBe(false); // no diplomas
    expect(parseDuoLookup({ diplomas: [] }).ok).toBe(false); // no handmatig
    expect(parseDuoLookup({ diplomas: [{ id: 'd1' }], handmatig: valid.handmatig }).ok).toBe(false); // bad diploma
    expect(
      parseDuoLookup({
        diplomas: [],
        handmatig: {
          beroepen: ['Arts'],
          policyQuestions: [{ id: 'x', vraag: 'y', type: 'bogus' }],
        },
      }).ok,
    ).toBe(false); // bad question type
  });
});
