import { describe, it, expect } from "vitest";
import { WebhookTriggerEvents } from "@calcom/prisma/enums";

import type { MeetingStartedDTO, MeetingEndedDTO } from "../../dto/types";
import { MeetingPayloadBuilder } from "../versioned/v2021-10-20/MeetingPayloadBuilder";

describe("MeetingPayloadBuilder (v2021-10-20)", () => {
  const builder = new MeetingPayloadBuilder();

  const mockBookingData = {
    id: 1,
    uid: "booking-uid-123",
    title: "Test Meeting",
    startTime: "2024-01-15T10:00:00Z",
    endTime: "2024-01-15T10:30:00Z",
  };

  describe("MEETING_STARTED", () => {
    it("should build payload with booking data", () => {
      const dto: MeetingStartedDTO = {
        triggerEvent: WebhookTriggerEvents.MEETING_STARTED,
        createdAt: "2024-01-15T10:00:00Z",
        booking: mockBookingData,
      };

      const payload = builder.build(dto);

      expect(payload.triggerEvent).toBe(WebhookTriggerEvents.MEETING_STARTED);
      expect(payload.createdAt).toBe("2024-01-15T10:00:00Z");
      expect(payload.payload.id).toBe(1);
      expect(payload.payload.uid).toBe("booking-uid-123");
      expect(payload.payload.title).toBe("Test Meeting");
    });
  });

  describe("MEETING_ENDED", () => {
    it("should build payload with booking data", () => {
      const dto: MeetingEndedDTO = {
        triggerEvent: WebhookTriggerEvents.MEETING_ENDED,
        createdAt: "2024-01-15T10:30:00Z",
        booking: mockBookingData,
      };

      const payload = builder.build(dto);

      expect(payload.triggerEvent).toBe(WebhookTriggerEvents.MEETING_ENDED);
      expect(payload.createdAt).toBe("2024-01-15T10:30:00Z");
      expect(payload.payload).toEqual(mockBookingData);
    });
  });
});
