"use client";

import { useCallback, useEffect, useState } from "react";
import { doc, getDoc } from "firebase/firestore";
import { getDb, firebaseConfigured } from "@/lib/firebase";
import type { DocumentData } from "firebase/firestore";

export function useAdminDoc<T extends DocumentData>(
  collectionName: string,
  docId: string,
  fallback: T
) {
  const [data, setData] = useState<T>(fallback);
  const [loading, setLoading] = useState(true);

  const reload = useCallback(async () => {
    if (!firebaseConfigured) {
      setData(fallback);
      setLoading(false);
      return;
    }
    const db = getDb();
    if (!db) {
      setLoading(false);
      return;
    }
    const snap = await getDoc(doc(db, collectionName, docId));
    if (snap.exists()) {
      setData({ ...fallback, ...snap.data() } as T);
    } else {
      setData(fallback);
    }
    setLoading(false);
  }, [collectionName, docId, fallback]);

  useEffect(() => {
    void reload();
  }, [reload]);

  return { data, setData, loading, reload };
}
