"use client";

// react-markdown + remark zinciri (~215 KB) yalnızca markdown gerçekten
// çizileceği zaman insin. next/dynamic yerine elle sarmalayıcı: `loading`
// children alamıyor, fallback'in AYNI class'lı düz metin olması gerekiyor ki
// stream sırasında iskelet/boşluk flash'ı olmasın (chunk gelince yerinde
// zenginleşir).

import { useEffect, useReducer } from "react";
import type { MarkdownProps } from "./markdown";

let mod: typeof import("./markdown") | null = null;
let soz: Promise<void> | null = null;

/** Chunk'ı önden ısıt (ör. sohbet mount olduğunda). */
export function preloadMarkdown(): Promise<void> {
  return (soz ??= import("./markdown").then((m) => {
    mod = m;
  }));
}

export function MarkdownLazy({
  fallback,
  ...props
}: MarkdownProps & { fallback: React.ReactNode }) {
  const [, tazele] = useReducer((c: number) => c + 1, 0);
  useEffect(() => {
    if (!mod) void preloadMarkdown().then(() => tazele());
  }, []);
  const Markdown = mod?.Markdown;
  return Markdown ? <Markdown {...props} /> : <>{fallback}</>;
}
