import {getConnection} from "typeorm";

import {CreateTicketRequest} from "../../api/classes/create-ticket.request";
import {Message} from "../../entity/message";
import {Ticket} from "../../entity/ticket";
import slack from '../../slack/slack-bootstrapper';

export class CreateTicketWorkflow {

  public static async create(data: CreateTicketRequest) {
    return await getConnection().transaction(async transactionalEntityManager => {
      const ticket = new Ticket();
      ticket.name = data.name;
      ticket.licenseeId = data.licenseeId;

      const threadResult = await slack.worker.createThreadForTicketId(ticket);
      ticket.slackThreadTs = threadResult.ts;

      await transactionalEntityManager.save(ticket);

      const message = new Message();
      message.ticket = Promise.resolve(ticket);
      message.body = data.description;
      await transactionalEntityManager.save(message);

      await slack.worker.postTicketMessage(ticket, message);

      return ticket;
    });
  }

}
