import "server-only";
import { asc, eq } from "drizzle-orm";
import { appDb, schema } from "@/lib/appdb";
import { anahtarVar } from "@/lib/ai/client";
import type { RaporSonuc } from "./types/rapor";

// Rapor feature'ının sorgu kapısı: kayıtlı rapor, sohbet geçmişi ve girişsiz
// tadımlık seçimi buradan okunur.

// Girişsiz tadımlık satırı — batch üretilmiş havuzdan seçilir, LLM'e gitmez.
export { tadimlikSec } from "@/lib/tadimlik-havuzu";

// Kullanıcının kayıtlı raporunu okuyan TEK kapı. Rapor tablosunu okuyan her
// yer (sayfalar, action'lar, soru API'si) buradan geçmeli; doğrudan
// appDb.query.reports.findFirst kullanma.
//
// Neden: dev'de API anahtarı yokken üretilen mock rapor DB'ye kaydediliyor
// (akışın tamamı anahtarsız test edilebilsin diye — bilinçli). Ama anahtar
// sonradan eklenince kullanıcı başına tek rapor kuralı yüzünden o bayat mock,
// gerçek Yapay Zeka çıktısıymış gibi servis edilmeye devam ediyordu. Gerçek AI
// aktifken mock üretimi bir rapor "yok" sayılır; kullanıcı yeni (gerçek)
// listeyi üretir ve kayıt üzerine yazılır.

function bayatMockMu(sonuc: RaporSonuc): boolean {
  const mockUretimi =
    sonuc.devMock === true ||
    // devMock alanı eklenmeden önce kaydedilmiş mock raporlar
    sonuc.genelDegerlendirme?.startsWith("(Dev mock");
  if (!mockUretimi) return false;
  const mockHalaAktif =
    process.env.NODE_ENV !== "production" && !anahtarVar();
  return !mockHalaAktif;
}

export async function kullanicininRaporu(userId: string) {
  const satir = await appDb.query.reports.findFirst({
    where: eq(schema.reports.userId, userId),
  });
  if (satir?.result && bayatMockMu(satir.result as RaporSonuc)) return null;
  return satir ?? null;
}

/** Kullanıcının danışman sohbet geçmişi, eskiden yeniye (en fazla 100 mesaj). */
export function sohbetGecmisiGetir(userId: string) {
  return appDb
    .select({
      id: schema.chatMessages.id,
      role: schema.chatMessages.role,
      content: schema.chatMessages.content,
    })
    .from(schema.chatMessages)
    .where(eq(schema.chatMessages.userId, userId))
    .orderBy(asc(schema.chatMessages.createdAt))
    .limit(100);
}
