import type { NextApiRequest, NextApiResponse } from "next";
import prisma from "@lib/prisma";
import { getBusyCalendarTimes } from "@lib/calendarClient";
import { getBusyVideoTimes } from "@lib/videoClient";
import dayjs from "dayjs";

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const { user } = req.query;

  const currentUser = await prisma.user.findFirst({
    where: {
      username: user,
    },
    select: {
      credentials: true,
      timeZone: true,
      bufferTime: true,
      id: true,
    },
  });

  const selectedCalendars = await prisma.selectedCalendar.findMany({
    where: {
      userId: currentUser.id,
    },
  });

  const calendarBusyTimes = await getBusyCalendarTimes(
    currentUser.credentials,
    req.query.dateFrom,
    req.query.dateTo,
    selectedCalendars
  );
  const videoBusyTimes = await getBusyVideoTimes(
    currentUser.credentials,
    req.query.dateFrom,
    req.query.dateTo
  );
  calendarBusyTimes.push(...videoBusyTimes);

  const bufferedBusyTimes = calendarBusyTimes.map((a) => ({
    start: dayjs(a.start).subtract(currentUser.bufferTime, "minute").toString(),
    end: dayjs(a.end).add(currentUser.bufferTime, "minute").toString(),
  }));

  res.status(200).json(bufferedBusyTimes);
}