import "server-only";
import { HydrationBoundary, QueryClient, dehydrate } from "@tanstack/react-query";
import type { ReactNode } from "react";

export type SeedEntry = { queryKey: unknown[]; data: unknown };

/**
 * يحقن بيانات الخادم في ذاكرة React Query بنفس مفاتيح المكوّنات الأصلية،
 * فيُصيَّر المحتوى الحقيقي (لا هيكل التحميل) في HTML الأول.
 *
 * updatedAt: 1 → تُعدّ البيانات قديمة، فيعيد المكوّن تشغيل queryFn الأصلي
 * في الخلفية بعد التركيب تماماً كما في نسخة Vite. هذا يحفظ أي أثر جانبي
 * داخل queryFn (مثل setRowDetails في صفحة البرنامج التدريبي ومسار الدفع).
 */
export function SeedQueries({ entries, children }: { entries: SeedEntry[]; children: ReactNode }) {
    const valid = entries.filter((e) => e.data !== undefined && e.data !== null);
    if (valid.length === 0) return <>{children}</>;

    const qc = new QueryClient();
    for (const e of valid) qc.setQueryData(e.queryKey, e.data, { updatedAt: 1 });

    return <HydrationBoundary state={dehydrate(qc)}>{children}</HydrationBoundary>;
}
