import { SetMetadata } from '@nestjs/common';

export interface RateLimitConfig {
  key: string;
  maxRequests: number;
  windowSeconds: number;
  /** 按 IP 限流（默认按 userId，未登录时 fallback 到 IP） */
  byIp?: boolean;
}

export const RATE_LIMIT_KEY = 'rate-limit';

export const RateLimit = (config: RateLimitConfig) => SetMetadata(RATE_LIMIT_KEY, config);

/** 登录：单 IP 每 30 分钟 20 次 */
export const LoginRateLimit = () =>
  RateLimit({ key: 'login', maxRequests: 20, windowSeconds: 1800, byIp: true });

/** 反馈：单 IP 每小时 5 次 */
export const FeedbackRateLimit = () =>
  RateLimit({ key: 'feedback', maxRequests: 5, windowSeconds: 3600, byIp: true });

/** AI 分析：单用户每天 50 次 */
export const AiAnalysisRateLimit = () =>
  RateLimit({ key: 'ai', maxRequests: 50, windowSeconds: 86400 });

/** 文件上传：单用户每小时 200 次 */
export const FileUploadRateLimit = () =>
  RateLimit({ key: 'upload', maxRequests: 200, windowSeconds: 3600 });

/** 管理员登录：单 IP 每 15 分钟 10 次 */
export const AdminLoginRateLimit = () =>
  RateLimit({ key: 'admin-login', maxRequests: 10, windowSeconds: 900, byIp: true });
