const RAG_URL = process.env.RAG_URL || 'http://localhost:5007';
const RAG_API_KEY = process.env.RAG_API_KEY || '';

interface RAGResponse {
  answer: string;
  sources?: string[];
}

export async function queryRAG(question: string, context?: string): Promise<RAGResponse> {
  try {
    console.log(`[rag-client] Querying RAG service at ${RAG_URL}/ask`);
    const headers: Record<string, string> = { 'Content-Type': 'application/json' };
    if (RAG_API_KEY) {
      headers['X-API-Key'] = RAG_API_KEY;
    }
    const response = await fetch(`${RAG_URL}/ask`, {
      method: 'POST',
      headers,
      body: JSON.stringify({
        question,
        context: context || 'sports betting education',
      }),
      signal: AbortSignal.timeout(30000),
    });

    if (!response.ok) {
      console.warn(`[rag-client] Non-OK response: ${response.status}`);
      return { answer: '' };
    }

    const data: any = await response.json();
    const answer = data.answer || data.response || data.text || '';
    console.log(`[rag-client] RAG returned ${answer.length} chars, ${(data.sources || []).length} sources`);
    return {
      answer,
      sources: data.sources || [],
    };
  } catch (error: any) {
    console.warn('[rag-client] Failed to query RAG service:', (error as Error).message);
    return { answer: '' };
  }
}

export async function isRAGAvailable(): Promise<boolean> {
  try {
    const response = await fetch(`${RAG_URL}/health`, {
      signal: AbortSignal.timeout(5000),
    });
    const available = response.ok;
    if (!available) {
      console.warn(`[rag-client] RAG health check failed: HTTP ${response.status}`);
    } else {
      console.log('[rag-client] RAG service is available');
    }
    return available;
  } catch (err: any) {
    console.warn(`[rag-client] RAG service unavailable at ${RAG_URL}: ${err.message}`);
    return false;
  }
}
