import { findMagicDeviceByToken } from "../../db/devices";

/**
 * GET /api/magic/status?token=<dnsToken>
 *
 * KEIN auth required — Token selbst ist das Secret (64-char hex).
 *
 * Polling-Endpoint für den Windows-Tamper-Service (rebreak-magic-win):
 * Service prüft alle 5 Minuten ob das Binding noch aktiv ist.
 * - active=true  → DoH-Schutz muss aktiv sein (bei Manipulation re-applien)
 * - active=false → Release-Cooldown abgelaufen, Token revoked → Teardown erlaubt
 *
 * Offline-Verhalten ist Client-Sache: kein Response → fail-closed (Schutz bleibt).
 */
export default defineEventHandler(async (event) => {
  const query = getQuery(event);
  const token = query.token as string | undefined;

  // Hex-Token, ≤63 Zeichen (AdGuard-clientid-Limit). Länge nicht hart fixieren,
  // damit Token-Längen-Änderungen den Tamper-Poll nicht brechen.
  if (!token || !/^[0-9a-f]{1,63}$/.test(token)) {
    throw createError({
      statusCode: 400,
      message: "token query parameter required",
    });
  }

  const device = await findMagicDeviceByToken(token);

  if (!device) {
    return {
      success: true,
      data: {
        active: false,
        sleep: false,
      },
    };
  }

  const inCooldown = device.magicCooldownUntil && device.magicCooldownUntil > new Date();

  return {
    success: true,
    data: {
      active: !device.magicRevokedAt && !!device.magicEnrolledAt,
      sleep: !!inCooldown,
    },
  };
});
