import type { NextApiRequest, NextApiResponse } from "next";

import { CALCOM_CREDENTIAL_SYNC_HEADER_NAME, CALCOM_CREDENTIAL_SYNC_SECRET } from "../../constants";
import { generateGoogleCalendarAccessToken, generateZoomAccessToken } from "../../lib/integrations";

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  const secret = req.headers[CALCOM_CREDENTIAL_SYNC_HEADER_NAME];
  console.log("getToken hit");
  try {
    if (!secret) {
      return res.status(403).json({ message: "secret header not set" });
    }
    if (secret !== CALCOM_CREDENTIAL_SYNC_SECRET) {
      return res.status(403).json({ message: "Invalid secret" });
    }

    const calcomUserId = req.body.calcomUserId;
    const appSlug = req.body.appSlug;
    console.log("getToken Params", {
      calcomUserId,
      appSlug,
    });
    let accessToken;
    if (appSlug === "google-calendar") {
      accessToken = await generateGoogleCalendarAccessToken();
    } else if (appSlug === "zoom") {
      accessToken = await generateZoomAccessToken();
    } else {
      throw new Error("Unhandled values");
    }
    if (!accessToken) {
      throw new Error("Unable to generate token");
    }
    res.status(200).json({
      _1: true,
      access_token: accessToken,
    });
  } catch (e) {
    res.status(500).json({ error: e.message });
  }
}
