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

import { Player } from '../../../src/models/Player.js';
import { Person } from '../../../src/models/Person.js';
import { handleGenericEvent } from '../../../src/handlers/events.js';

class MockSession {
  player: Player;
  sent: unknown[] = [];

  constructor(player: Player) {
    this.player = player;
  }

  send(message: unknown): void {
    this.sent.push(message);
  }

  sendPlayerObject(): void {
    this.sent.push({ type: 'playerObject' });
  }
}

function createTeenPlayer(): Player {
  const character = new Person({
    id: 'char-1',
    firstname: 'Taylor',
    lastname: 'Player',
    sex: 'Female',
    ageYears: 11,
    ageDays: 11 * 365,
    ageHours: 11 * 365 * 24,
    location: 'school',
    energy: 80,
    happiness: 50,
    social: 50,
    money: 500,
    firstCrush: 'initial-crush',
  });

  return new Player({
    userId: 'user-1',
    character,
    status: 'playing',
    r: [],
  });
}

describe('current question response roundtrip characterization', () => {
  it('rejects legacy generic event answer payloads in tier 3 runtime', async () => {
    const session = new MockSession(createTeenPlayer());

    await handleGenericEvent(
      {
        type: 'firstCrush',
        message: { option: 'Any option' },
      },
      session as unknown as Parameters<typeof handleGenericEvent>[1]
    );

    expect(session.sent).toContainEqual(
      expect.objectContaining({
        type: 'event_error',
        code: 'UNSUPPORTED_LEGACY_COMMAND',
      })
    );
  });
});
