export async function onRequestPost(context: RequestContext) {
  if (!context.data.departments)
    return new Response('{"error":"Not in any departments"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 403,
    });

  const { departments, end, reason, start } = context.data.body;

  if (
    !Array.isArray(departments) ||
    !departments.length ||
    typeof end !== "string" ||
    typeof reason !== "string" ||
    typeof start !== "string"
  )
    return new Response('{"error":"Invalid notice"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 400,
    });

  const endDate = new Date(end);
  const startDate = new Date(start);
  const now = new Date();

  if (
    isNaN(endDate.getFullYear()) ||
    isNaN(startDate.getFullYear()) ||
    endDate.getFullYear() < now.getFullYear() ||
    endDate.getFullYear() > now.getFullYear() + 1 ||
    startDate.getFullYear() < now.getFullYear() ||
    startDate.getFullYear() > now.getFullYear() + 1 ||
    endDate.valueOf() < startDate.valueOf()
  )
    return new Response('{"error":"Dates are invalid"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 400,
    });

  if (!departments.every(d => context.data.departments.includes(d)))
    return new Response('{"error":"Cannot file a notice in a department you are not part of"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 400,
    });

  const inactivityId =
    context.data.current_user.id +
    (context.request.headers.get("cf-ray") as string).split("-")[0] +
    Date.now().toString();

  await context.env.DATA.put(`inactivity_${inactivityId}`, JSON.stringify({
    departments,
    end,
    reason,
    start,
    user: {
      discriminator: context.data.current_user.discriminator,
      id: context.data.current_user.id,
      username: context.data.current_user.username,
    },
  }), {
    expirationTtl: 63072000
  });

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