"use client";

import { useCallback, useEffect, useState } from "react";
import { createClient } from "@/lib/supabase/client";
import { useWorkspaceStore } from "@/stores/workspace-store";
import type { NoteFolder } from "@/types";

export function useNoteFolders() {
  const [folders, setFolders] = useState<NoteFolder[]>([]);
  const [loading, setLoading] = useState(true);
  const supabase = createClient();
  const activeTeamId = useWorkspaceStore((state) => state.activeTeamId);
  const initialized = useWorkspaceStore((state) => state.initialized);

  const fetchFolders = useCallback(async () => {
    if (!initialized) return;

    setLoading(true);

    let query = supabase.from("note_folders").select("*").order("sort_order").order("name");
    query = activeTeamId ? query.eq("team_id", activeTeamId) : query.is("team_id", null);

    const { data } = await query;
    setFolders((data || []) as NoteFolder[]);
    setLoading(false);
  }, [activeTeamId, initialized, supabase]);

  useEffect(() => {
    if (!initialized) return;
    const timer = window.setTimeout(() => {
      void fetchFolders();
    }, 0);

    return () => window.clearTimeout(timer);
  }, [fetchFolders, initialized]);

  return {
    folders,
    loading,
    refetch: fetchFolders,
  };
}
