/**
 * Recurring-NPC callback test (T011b).
 *
 * buildPlayerChoiceCallback turns a player's persistent choice flags into short
 * in-context lines an NPC can reference, so characters feel like they remember
 * the player's prior life decisions. Pure and DB-free.
 */
import { describe, it, expect } from 'vitest';
import { buildPlayerChoiceCallback } from '../../../src/events/conversations/character_memory.js';
import { LATE_LIFE_FLAGS } from '../../../src/events/v2/catalog/lateLife.js';
import { CAREER_FLAGS } from '../../../src/events/v2/catalog/career.js';

describe('buildPlayerChoiceCallback', () => {
  it('returns no callbacks for an empty flag set', () => {
    expect(buildPlayerChoiceCallback(new Set<string>())).toEqual([]);
    expect(buildPlayerChoiceCallback([])).toEqual([]);
    expect(buildPlayerChoiceCallback(undefined)).toEqual([]);
  });

  it('references a known persistent late-life choice flag', () => {
    const callbacks = buildPlayerChoiceCallback(new Set([LATE_LIFE_FLAGS.retired]));
    expect(callbacks.length).toBe(1);
    expect(callbacks[0]).toMatch(/retired/i);
  });

  it('references a known career choice flag (array form, post-JSON)', () => {
    const callbacks = buildPlayerChoiceCallback([CAREER_FLAGS.startedBusiness]);
    expect(callbacks.length).toBe(1);
    expect(callbacks[0]).toMatch(/business/i);
  });

  it('skips unknown flags and caps the number of callbacks', () => {
    const flags = new Set([
      'some.unknown.flag',
      LATE_LIFE_FLAGS.retired,
      LATE_LIFE_FLAGS.estatePlanned,
      LATE_LIFE_FLAGS.reconciledChild,
    ]);
    const callbacks = buildPlayerChoiceCallback(flags, 2);
    expect(callbacks.length).toBe(2);
    // Unknown flag produced nothing.
    expect(callbacks.every((c) => !c.includes('some.unknown.flag'))).toBe(true);
  });
});
