"use client";

import { useEffect, useMemo, useState } from "react";
import {
  collection,
  onSnapshot,
  orderBy,
  query,
  type DocumentData,
} from "firebase/firestore";
import { getDb, firebaseConfigured } from "@/lib/firebase";

export function useCollection<T extends DocumentData>(
  collectionName: string,
  orderField: string,
  direction: "asc" | "desc" = "desc",
  enabled = true
) {
  const [items, setItems] = useState<(T & { id: string })[]>([]);
  const [loading, setLoading] = useState(firebaseConfigured && enabled);
  const [error, setError] = useState<string | null>(null);

  const q = useMemo(() => {
    if (!enabled || !firebaseConfigured) return null;
    const db = getDb();
    if (!db) return null;
    return query(collection(db, collectionName), orderBy(orderField, direction));
  }, [collectionName, orderField, direction, enabled]);

  useEffect(() => {
    if (!q) {
      setItems([]);
      setLoading(false);
      return;
    }
    setLoading(true);
    const unsub = onSnapshot(
      q,
      (snap) => {
        const rows = snap.docs.map((d) => ({ id: d.id, ...d.data() } as T & { id: string }));
        setItems(rows);
        setLoading(false);
        setError(null);
      },
      (e) => {
        console.error(e);
        setError("Koleksiyon yüklenemedi. Firestore indeks gerekebilir.");
        setLoading(false);
      }
    );
    return () => unsub();
  }, [q]);

  return { items, loading, error };
}
