import { Transform } from 'class-transformer';
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';

const toOptionalString = ({ value }: { value: unknown }): unknown => {
  if (value === undefined || value === null) return value;
  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
    return String(value);
  }
  return value;
};

/** Form body from list/webhook_instant.php `ultramsgPostMessage`. */
export class UltramsgChatSendDto {
  @IsString()
  @IsNotEmpty()
  token!: string;

  @IsString()
  @IsNotEmpty()
  to!: string;

  @IsString()
  @IsNotEmpty()
  body!: string;

  @IsOptional()
  @Transform(toOptionalString)
  @IsString()
  priority?: string;

  @IsOptional()
  @Transform(toOptionalString)
  @IsString()
  referenceId?: string;

  @IsOptional()
  @Transform(toOptionalString)
  @IsString()
  msgId?: string;
}
