import { useState, useCallback } from 'react';
import toast from 'react-hot-toast';

interface WishlistItem {
  id: number;
  productId: number;
  variantId: number;
}

export const useWishlist = () => {
  const [isLoading, setIsLoading] = useState(false);
  const [wishlistItems, setWishlistItems] = useState<WishlistItem[]>([]);

  const addToWishlist = useCallback(async (productId: number, variantId: number) => {
    try {
      setIsLoading(true);
      const response = await fetch('/api/wishlist', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ productId, variantId }),
      });

      if (response.status === 401) {
        toast.error('Přihlaste se pro přidání do oblíbených');
        return false;
      }

      if (response.status === 409) {
        toast.error('Produkt je již v oblíbených');
        return false;
      }

      if (response.ok) {
        toast.success('Přidáno do oblíbených');
        setWishlistItems([...wishlistItems, { id: 0, productId, variantId }]);
        return true;
      }

      toast.error('Chyba při přidávání do oblíbených');
      return false;
    } catch (error) {
      toast.error('Chyba při přidávání do oblíbených');
      return false;
    } finally {
      setIsLoading(false);
    }
  }, [wishlistItems]);

  const removeFromWishlist = useCallback(async (itemId: number) => {
    try {
      setIsLoading(true);
      const response = await fetch(`/api/wishlist?itemId=${itemId}`, {
        method: 'DELETE',
      });

      if (response.ok) {
        toast.success('Odebráno z oblíbených');
        setWishlistItems(wishlistItems.filter(item => item.id !== itemId));
        return true;
      }

      toast.error('Chyba při odebírání');
      return false;
    } catch (error) {
      toast.error('Chyba při odebírání');
      return false;
    } finally {
      setIsLoading(false);
    }
  }, [wishlistItems]);

  const isInWishlist = useCallback((productId: number, variantId: number) => {
    return wishlistItems.some(
      item => item.productId === productId && item.variantId === variantId
    );
  }, [wishlistItems]);

  return {
    addToWishlist,
    removeFromWishlist,
    isInWishlist,
    wishlistItems,
    isLoading,
  };
};
