import type { AIProviderConfig } from "@/lib/ai/types";
import { getActiveAIConfig } from "@/lib/ai/config";

export function isRagEnabled(): boolean {
  return process.env.RAG_ENABLED !== "false";
}

export function getRagTopK(): number {
  const raw = Number(process.env.RAG_TOP_K ?? 5);
  if (!Number.isFinite(raw)) return 5;
  return Math.max(1, Math.min(12, Math.round(raw)));
}

/** Topic boost added to cosine score when chunk topic matches. */
export function getRagTopicBoostWeight(): number {
  const raw = Number(process.env.RAG_TOPIC_BOOST ?? 0.06);
  return Number.isFinite(raw) ? raw : 0.06;
}

/**
 * RAG chat defaults to GPT-4o mini when OpenAI key is present (per extras/dev_doc/03).
 * Caption generation still uses AI_PROVIDER but receives retrieved KB context.
 */
export function getRagChatConfig(): AIProviderConfig {
  const forced = process.env.RAG_CHAT_PROVIDER?.trim().toLowerCase();
  const model = process.env.RAG_CHAT_MODEL?.trim() || "gpt-4o-mini";
  const openaiKey = process.env.OPENAI_API_KEY?.trim() ?? "";

  if (forced === "openai" || (forced !== "anthropic" && openaiKey)) {
    return {
      provider: "openai",
      model,
      timeoutMs: Number(process.env.OPENAI_TIMEOUT ?? 120) * 1000,
      apiKey: openaiKey,
    };
  }

  return getActiveAIConfig();
}
