"use client"

import { createContext, useContext, useState, useEffect, ReactNode } from "react"
import { useToast } from "@/components/ui/use-toast"

// Типы для избранного
export interface WishlistItem {
  id: number
  product_id: number
  name: string
  price: number
  discount_price?: number
  image: string | object
  slug: string
}

interface WishlistContextType {
  items: WishlistItem[]
  addItem: (item: WishlistItem) => void
  removeItem: (id: number) => void
  toggleItem: (item: WishlistItem) => void
  clearWishlist: () => void
  isInWishlist: (id: number) => boolean
  itemCount: number
}

// Создание контекста
const WishlistContext = createContext<WishlistContextType | undefined>(undefined)

// Провайдер контекста
export function WishlistProvider({ children }: { children: ReactNode }) {
  const [items, setItems] = useState<WishlistItem[]>([])
  const { toast } = useToast()
  
  // Загрузка избранного из localStorage при инициализации
  useEffect(() => {
    const storedWishlist = localStorage.getItem("wishlist")
    if (storedWishlist) {
      try {
        setItems(JSON.parse(storedWishlist))
      } catch (e) {
        console.error("Ошибка при загрузке избранного из localStorage:", e)
        localStorage.removeItem("wishlist")
      }
    }
  }, [])
  
  // Сохранение избранного в localStorage при изменении
  useEffect(() => {
    localStorage.setItem("wishlist", JSON.stringify(items))
  }, [items])
  
  // Добавление товара в избранное
  const addItem = (item: WishlistItem) => {
    setItems(prevItems => {
      // Проверяем, есть ли уже такой товар в избранном
      const existingItem = prevItems.find(i => i.product_id === item.product_id)
      
      // Если товар уже есть, ничего не делаем
      if (existingItem) {
        return prevItems
      }
      
      // Если товара нет, добавляем новый
      toast({
        title: "Товар добавлен в избранное",
        description: item.name,
      })
      
      return [...prevItems, item]
    })
  }
  
  // Удаление товара из избранного
  const removeItem = (id: number) => {
    setItems(prevItems => {
      const itemToRemove = prevItems.find(item => item.product_id === id)
      
      if (itemToRemove) {
        toast({
          title: "Товар удален из избранного",
          description: itemToRemove.name,
        })
      }
      
      return prevItems.filter(item => item.product_id !== id)
    })
  }
  
  // Переключение товара в избранном (добавление/удаление)
  const toggleItem = (item: WishlistItem) => {
    const isItemInWishlist = items.some(i => i.product_id === item.product_id)
    
    if (isItemInWishlist) {
      removeItem(item.product_id)
    } else {
      addItem(item)
    }
  }
  
  // Проверка, находится ли товар в избранном
  const isInWishlist = (id: number) => {
    return items.some(item => item.product_id === id)
  }
  
  // Очистка избранного
  const clearWishlist = () => {
    setItems([])
    
    toast({
      title: "Список избранного очищен",
    })
  }
  
  // Подсчет общего количества товаров
  const itemCount = items.length
  
  const value = {
    items,
    addItem,
    removeItem,
    toggleItem,
    clearWishlist,
    isInWishlist,
    itemCount
  }
  
  return <WishlistContext.Provider value={value}>{children}</WishlistContext.Provider>
}

// Хук для использования избранного
export function useWishlist() {
  const context = useContext(WishlistContext)
  
  if (context === undefined) {
    throw new Error("useWishlist must be used within a WishlistProvider")
  }
  
  return context
} 