import { validate } from 'class-validator';
import { plainToInstance } from 'class-transformer';
import { UltramsgChatSendDto } from './dto/ultramsg-chat-send.dto';
import { engineQuotedId, toChatId } from './ultramsg-payload';

const PIPE_OPTS = { whitelist: true, forbidNonWhitelisted: true };

describe('UltramsgChatSendDto', () => {
  it('accepts the form fields list/webhook_instant.php posts', async () => {
    const dto = plainToInstance(UltramsgChatSendDto, {
      token: 'api-key',
      to: '918956456710',
      body: 'ok',
      priority: '10',
      referenceId: '',
      msgId: 'false_918956456710@c.us_AC4412109A976A4F1618AC65B8C78E81',
    });
    expect(await validate(dto, PIPE_OPTS)).toEqual([]);
    expect(toChatId(dto.to)).toBe('918956456710@c.us');
    expect(engineQuotedId(dto.msgId)).toBe('false_918956456710@c.us_AC4412109A976A4F1618AC65B8C78E81');
  });

  it('stringifies numeric priority from urlencoded parsing', async () => {
    const dto = plainToInstance(UltramsgChatSendDto, {
      token: 'api-key',
      to: '918956456710',
      body: 'ok',
      priority: 10,
    });
    expect(await validate(dto, PIPE_OPTS)).toEqual([]);
    expect(dto.priority).toBe('10');
  });

  it('rejects unknown properties', async () => {
    const dto = plainToInstance(UltramsgChatSendDto, {
      token: 'api-key',
      to: '918956456710',
      body: 'ok',
      extra: true,
    });
    const errors = await validate(dto, PIPE_OPTS);
    expect(errors.length).toBeGreaterThan(0);
  });
});
