import "server-only";
/**
 * Rybbit'e sunucudan olay gönderimi (POST /api/track). Yalnızca sunucu
 * tarafından çağrılır (lib/odeme.ts) — anahtar NEXT_PUBLIC_ değil.
 *
 * Neden sunucu tarafı: ödeme dönüşümü tarayıcıdan gönderilirse reklam
 * engelleyiciler ve iyzico dönüşünde kapatılan sekmeler yüzünden kaybolur.
 * Buradan giden kayıt gerçek geliri taşır ve her zaman düşer.
 *
 * Env yoksa (dev, self-host anahtarı tanımsız) hiçbir istek yapılmaz.
 */

const HOST = process.env.RYBBIT_HOST;
const SITE_ID = process.env.RYBBIT_SITE_ID;
const API_KEY = process.env.RYBBIT_API_KEY;

export type SunucuOlayAdi = "odeme_tamamlandi";

export async function sunucuOlayi(
  ad: SunucuOlayAdi,
  {
    kullaniciId,
    pathname = "/",
    ozellikler,
  }: {
    kullaniciId?: string;
    pathname?: string;
    ozellikler?: Record<string, string | number>;
  } = {},
): Promise<void> {
  if (!HOST || !SITE_ID || !API_KEY) return;

  try {
    await fetch(`${HOST}/api/track`, {
      method: "POST",
      headers: {
        Authorization: `Bearer ${API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        site_id: SITE_ID,
        type: "custom_event",
        event_name: ad,
        pathname,
        ...(kullaniciId ? { user_id: kullaniciId } : {}),
        ...(ozellikler ? { properties: JSON.stringify(ozellikler) } : {}),
      }),
      // Analitik ödeme akışını asla geciktirmesin/bloklamasın
      signal: AbortSignal.timeout(3000),
    });
  } catch {
    // Yut: analitik hatası ödeme sonucunu etkilemez
  }
}