"use client";

import { useEffect, useState, useCallback } from "react";
import { supabase } from "@/lib/supabase";

export function useWishlist(productId: string) {
  const [isFav, setIsFav] = useState(false);
  const [wishlistId, setWishlistId] = useState<string | null>(null);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    let cancelled = false;

    async function check() {
      const { data: { session } } = await supabase.auth.getSession();
      if (!session || cancelled) return;

      const { data } = await supabase
        .from("wishlists")
        .select("id")
        .eq("user_id", session.user.id)
        .eq("product_id", productId)
        .maybeSingle();

      if (!cancelled && data) {
        setIsFav(true);
        setWishlistId(data.id);
      }
    }

    check();
    return () => { cancelled = true; };
  }, [productId]);

  const toggle = useCallback(async (e?: React.MouseEvent) => {
    e?.preventDefault();
    e?.stopPropagation();

    const { data: { session } } = await supabase.auth.getSession();
    if (!session) {
      window.location.href = "/connexion";
      return;
    }

    setLoading(true);

    if (isFav && wishlistId) {
      await supabase.from("wishlists").delete().eq("id", wishlistId);
      setIsFav(false);
      setWishlistId(null);
    } else {
      const { data } = await supabase
        .from("wishlists")
        .insert({ user_id: session.user.id, product_id: productId })
        .select("id")
        .single();
      if (data) {
        setIsFav(true);
        setWishlistId(data.id);
      }
    }

    setLoading(false);
  }, [isFav, wishlistId, productId]);

  return { isFav, loading, toggle };
}
