/**
 * POST /api/magic/devices/:deviceId/cooldown
 *
 * Sets a temporary cooldown on a Magic device binding until the given
 * duration (in minutes, 1–1440) elapses.
 */
export default defineEventHandler(async (event) => {
  const user = await requireUser(event);
  const deviceId = getRouterParam(event, "deviceId");

  if (!deviceId) {
    throw createError({ statusCode: 400, message: "deviceId required" });
  }

  const body = await readBody(event);
  const raw = body?.durationMinutes;
  if (
    typeof raw !== "number" ||
    !Number.isFinite(raw) ||
    !Number.isInteger(raw) ||
    raw < 1 ||
    raw > 1440
  ) {
    throw createError({
      statusCode: 400,
      message: "durationMinutes must be an integer between 1 and 1440",
    });
  }
  const durationMinutes = raw;
  const cooldownUntil = new Date(Date.now() + durationMinutes * 60 * 1000);

  const db = usePrisma();
  const device = await db.userDevice.findUnique({
    where: { userId_deviceId: { userId: user.id, deviceId } },
    select: { id: true, magicEnrolledAt: true, magicRevokedAt: true },
  });

  if (!device || !device.magicEnrolledAt || device.magicRevokedAt) {
    throw createError({ statusCode: 404, message: "Magic-Binding nicht gefunden" });
  }

  await db.userDevice.update({
    where: { id: device.id },
    data: { magicCooldownUntil: cooldownUntil },
  });

  return {
    success: true,
    data: { cooldownUntil: cooldownUntil.toISOString() },
  };
});
