import { jsonError } from "../common.js";

export async function onRequestPost(context: RequestContext) {
  const { searchParams } = new URL(context.request.url);
  const id = searchParams.get("attachment");
  const token = searchParams.get("token");

  if (!id || !token) return jsonError("Invalid report id or token", 400);

  const coconutData: { token: string } | null = await context.env.DATA.get(
    `coconutjob_${id}`,
    { type: "json" },
  );

  if (!coconutData)
    return jsonError("Request is stale or otherwise invalid", 400);

  if (coconutData.token !== token) return jsonError("Forbidden", 403);

  await context.env.DATA.delete(`coconutjob_${id}`);

  const { event } = await context.request.json();

  if (event === "job.failed") {
    await fetch(context.env.REPORTS_WEBHOOK, {
      body: JSON.stringify({
        embeds: [
          {
            title: "Transcoding Failed",
            color: 16711680,
            description: `Attachment ${id} could not be transcoded, please log in to Coconut to see what went wrong.`,
          },
        ],
      }),
      headers: {
        "content-type": "application/json",
      },
      method: "POST",
    });
  }

  return new Response(null, {
    status: 204,
  });
}