import {JsonObject, JsonProperty} from "json2typescript";

import {Ticket} from "../../../entity/ticket";
import {TimestampDateConverter} from "../parser/converters/timestamp-date.converter";

@JsonObject('TicketSerialized')
export class TicketSerialized {

  @JsonProperty('id', Number)
  id: number = undefined;

  @JsonProperty('name', String)
  name: string = undefined;

  @JsonProperty('licenseeId', Number)
  licenseeId: number = undefined;

  @JsonProperty('createdOn', TimestampDateConverter)
  createdOn: Date = undefined;

  @JsonProperty('updatedOn', TimestampDateConverter)
  updatedOn: Date = undefined;

  @JsonProperty('description', String)
  description: string = undefined;

  @JsonProperty('messageCount', Number)
  messageCount: number = undefined;

  @JsonProperty('isUnread', Boolean)
  isUnread: boolean = undefined;

  public static async createFromObj(ticket: Ticket): Promise<TicketSerialized> {
    const inst = new TicketSerialized();
    inst.id = ticket.id;
    inst.name = ticket.name;
    inst.licenseeId = ticket.licenseeId;
    inst.createdOn = ticket.createdOn;
    inst.updatedOn = ticket.updatedOn;

    const messages = await ticket.messages;
    inst.description = messages[0].body;
    inst.messageCount = messages.length;

    inst.isUnread = ticket.lastQueriedOn && messages.filter(m => m.sentBy)
      .map(m => m.createdOn.getTime())
      .sort((a, b) => b - a)[0] > ticket.lastQueriedOn.getTime();

    return inst;
  }

}
