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

import {
  omitInternalId,
  omitInternalIdList,
  toPublicAbsence,
  toPublicContract,
  toPublicSanction,
} from '../../../src/server/public-entity';

describe('Unit — public entity helpers', () => {
  it('omitInternalId removes the technical id field', () => {
    const entity = { id: 42, COS: 123, PRE: 'Alice' };

    expect(omitInternalId(entity)).toEqual({ COS: 123, PRE: 'Alice' });
  });

  it('omitInternalIdList removes technical ids from every item', () => {
    const items = [
      { id: 1, COS: 123, PRE: 'Alice' },
      { id: 2, ID_Contrat: 55, Id_Salarie: 123 },
    ];

    expect(omitInternalIdList(items)).toEqual([
      { COS: 123, PRE: 'Alice' },
      { ID_Contrat: 55, Id_Salarie: 123 },
    ]);
  });

  it('toPublicContract normalizes contract identifiers', () => {
    const contract = { id: 10, ID_Contrat: 5524, Id_Salarie: 955, TCS: 'CDI' };

    expect(toPublicContract(contract)).toEqual({
      TCS: 'CDI',
      id_contrat: 5524,
      id_salarie: 955,
    });
  });

  it('toPublicAbsence exposes id_salarie instead of num_salarie', () => {
    const absence = { id: 7, num_salarie: 955, commentaire: 'ok' };

    expect(toPublicAbsence(absence)).toEqual({
      commentaire: 'ok',
      id_salarie: 955,
    });
  });

  it('toPublicSanction exposes id_salarie instead of num_salarie', () => {
    const sanction = { id: 8, num_salarie: 955, motif: 'warning' };

    expect(toPublicSanction(sanction)).toEqual({
      motif: 'warning',
      id_salarie: 955,
    });
  });
});
