import Redis from "ioredis";

/**
 * Redis 客户端单例
 * - 用于：票数缓存 / 限流 / 风控 / 实时排行
 * - 部署：火山引擎 Redis 实例（通过 REDIS_URL 连接）
 *
 * 开发环境若未配置 REDIS_URL，则降级为内存模式（不持久化、不分布式）。
 */

declare global {
  // eslint-disable-next-line no-var
  var __redis: Redis | undefined;
}

let client: Redis | null = null;

export function getRedis(): Redis | null {
  if (client) return client;

  const url = process.env.REDIS_URL;
  if (!url) {
    if (process.env.NODE_ENV === "production") {
      console.warn("[redis] REDIS_URL 未配置，限流和风控功能将无法使用");
    }
    return null;
  }

  if (process.env.NODE_ENV !== "production" && globalThis.__redis) {
    return globalThis.__redis;
  }

  client = new Redis(url, {
    maxRetriesPerRequest: 3,
    enableReadyCheck: true,
    lazyConnect: true,
  });

  client.on("error", (err) => {
    console.error("[redis] error:", err.message);
  });

  if (process.env.NODE_ENV !== "production") {
    globalThis.__redis = client;
  }
  return client;
}
