const minIntervalMs = Number(process.env.EXAM_SNAPSHOT_MIN_INTERVAL_MS || 15_000);
const lastUploadAt = new Map<string, number>();
const THROTTLE_MAP_TTL_MS = 2 * 60 * 60 * 1000;

export function checkSnapshotThrottle(userId: string): {
  allowed: boolean;
  retryAfterMs: number;
} {
  const key = userId.trim() || 'unknown';
  const now = Date.now();
  const last = lastUploadAt.get(key) ?? 0;
  const elapsed = now - last;

  if (elapsed < minIntervalMs) {
    return { allowed: false, retryAfterMs: minIntervalMs - elapsed };
  }

  lastUploadAt.set(key, now);
  return { allowed: true, retryAfterMs: 0 };
}

/** ลบ entry เก่า — กัน memory leak ระยะยาว */
export function pruneSnapshotThrottleMap(): void {
  const now = Date.now();
  for (const [key, ts] of lastUploadAt.entries()) {
    if (now - ts > THROTTLE_MAP_TTL_MS) {
      lastUploadAt.delete(key);
    }
  }
}

setInterval(pruneSnapshotThrottleMap, 30 * 60 * 1000).unref?.();
