"use server";

// Dev süperadmin aksiyonları: yalnızca geliştirme ortamında çalışır.
// Panelden (src/components/dev/dev-panel.tsx) çağrılır; kullanıcı durumunu
// (kredi, paket, rapor) kurcalayıp tüm sayfaları gerçek akışta gezmeyi sağlar.

import { eq } from "drizzle-orm";
import { headers } from "next/headers";
import { appDb, schema } from "@/lib/appdb";
import { kullanicininRaporu } from "@/features/rapor/rapor-queries";
import { auth } from "@/lib/auth";
import { getCurrentUser } from "@/lib/session";
import { URUNLER } from "@/lib/credits";

function devKontrol() {
  if (process.env.NODE_ENV === "production") {
    throw new Error("Dev paneli yalnızca geliştirme ortamında çalışır.");
  }
}

export type DevDurum =
  | { girisli: false }
  | {
      girisli: true;
      email: string;
      kredi: number;
      hasPaket: boolean;
      raporVar: boolean;
      sira: number | null;
      tur: string | null;
    };

export async function devDurum(): Promise<DevDurum> {
  devKontrol();
  const user = await getCurrentUser();
  if (!user) return { girisli: false };
  const rapor = await kullanicininRaporu(user.id);
  const params = rapor?.params as { sira?: number; tur?: string } | undefined;
  return {
    girisli: true,
    email: user.email,
    kredi: user.creditBalance,
    hasPaket: user.hasPaket,
    raporVar: Boolean(rapor),
    sira: params?.sira ?? null,
    tur: params?.tur ?? null,
  };
}

/** Magic link üretir ve (dev'de auth.ts'in yakaladığı) URL'i döner —
 *  panel bu URL'e giderek anında oturum açar; yeni e-posta = yeni kullanıcı. */
export async function devAnindaGiris(
  email: string,
): Promise<{ ok: true; url: string } | { ok: false; error: string }> {
  devKontrol();
  const temiz = email.trim().toLowerCase();
  if (!/^\S+@\S+\.\S+$/.test(temiz)) {
    return { ok: false, error: "Geçerli bir e-posta gir." };
  }
  const g = globalThis as { __sonMagicLink?: string };
  g.__sonMagicLink = undefined;
  await auth.api.signInMagicLink({
    body: { email: temiz, callbackURL: "/" },
    headers: await headers(),
  });
  if (!g.__sonMagicLink) {
    return { ok: false, error: "Magic link üretilemedi (auth.ts yakalayamadı)." };
  }
  return { ok: true, url: g.__sonMagicLink };
}

export async function devAyarla(ayar: {
  kredi?: number;
  hasPaket?: boolean;
}): Promise<{ ok: boolean; error?: string }> {
  devKontrol();
  const user = await getCurrentUser();
  if (!user) return { ok: false, error: "Önce giriş yap." };
  await appDb
    .update(schema.user)
    .set({
      ...(typeof ayar.kredi === "number"
        ? { creditBalance: Math.max(0, Math.round(ayar.kredi)) }
        : {}),
      ...(typeof ayar.hasPaket === "boolean"
        ? { hasPaket: ayar.hasPaket }
        : {}),
    })
    .where(eq(schema.user.id, user.id));
  return { ok: true };
}

/** Raporu ve sohbet geçmişini siler — boş durumları test etmek için. */
export async function devRaporSil(): Promise<{ ok: boolean; error?: string }> {
  devKontrol();
  const user = await getCurrentUser();
  if (!user) return { ok: false, error: "Önce giriş yap." };
  await appDb
    .delete(schema.reports)
    .where(eq(schema.reports.userId, user.id));
  await appDb
    .delete(schema.chatMessages)
    .where(eq(schema.chatMessages.userId, user.id));
  return { ok: true };
}

/** Ödenmiş sahte sipariş oluşturur — /odeme/sonuc başarı ekranı için. */
export async function devSahteOdeme(): Promise<
  { ok: true; siparis: string } | { ok: false; error: string }
> {
  devKontrol();
  const user = await getCurrentUser();
  if (!user) return { ok: false, error: "Önce giriş yap." };
  const id = `dev-${crypto.randomUUID()}`;
  await appDb.insert(schema.orders).values({
    id,
    userId: user.id,
    product: "paket",
    amountKurus: URUNLER.paket.amountKurus,
    credits: URUNLER.paket.credits,
    status: "paid",
    createdAt: new Date(),
  });
  return { ok: true, siparis: id };
}
