import { AttachmentDto } from '../../attachment/dto/attachment.dto';
import { SlackUserDto } from '../../slack-user/dto/slack-user.dto';
import { Message } from '../message.entity';

export class MessageDto {
  id: number;
  body: string;
  slackSentBy: SlackUserDto;
  createdOn: number;
  updatedOn: number;
  attachments: AttachmentDto[];
  ticketId: number;
  editedOn: number;

  constructor(partial: Partial<MessageDto>) {
    Object.assign(this, partial);
  }

  static async createFromEntity(entity: Message): Promise<MessageDto> {
    return new MessageDto({
      id: entity.id,
      body: entity.body,
      slackSentBy: SlackUserDto.createFromEntity(await entity.slackSentBy),
      createdOn: entity.createdOn.getTime(),
      updatedOn: entity.updatedOn.getTime(),
      attachments: await Promise.all(
        (await entity.attachments).map((a) => AttachmentDto.createFromEntity(a))
      ),
      ticketId: (await entity.ticket).id,
      editedOn: entity.editedOn ? entity.editedOn.getTime() : null,
    });
  }
}
