import { Ratelimit } from "@upstash/ratelimit";
import { redis } from "./redis";

/**
 * Rate Limiter configurations for different endpoints
 */
export const leadSubmissionRateLimit = redis
  ? new Ratelimit({
      redis,
      limiter: Ratelimit.slidingWindow(5, "10 m"), // 5 inquiries per 10 minutes per IP/User
      analytics: true,
      prefix: "ratelimit:lead",
    })
  : null;

export const searchRateLimit = redis
  ? new Ratelimit({
      redis,
      limiter: Ratelimit.slidingWindow(60, "1 m"), // 60 search requests per minute per IP
      analytics: true,
      prefix: "ratelimit:search",
    })
  : null;

export const authWebhookRateLimit = redis
  ? new Ratelimit({
      redis,
      limiter: Ratelimit.slidingWindow(100, "1 m"), // 100 webhook calls per minute
      analytics: true,
      prefix: "ratelimit:webhook",
    })
  : null;

/**
 * Helper to check rate limit and return boolean
 */
export async function checkRateLimit(
  limiter: Ratelimit | null,
  identifier: string
): Promise<{ success: boolean; limit: number; remaining: number; reset: number }> {
  if (!limiter) {
    // If Redis is not configured in dev, bypass rate limiting
    return { success: true, limit: 100, remaining: 100, reset: Date.now() };
  }

  const result = await limiter.limit(identifier);
  return {
    success: result.success,
    limit: result.limit,
    remaining: result.remaining,
    reset: result.reset,
  };
}
