"use client";
import React, { createContext, useContext, useState, useEffect, ReactNode } from "react";
import toast from 'react-hot-toast';

interface CartItem {
  id: string;
  title: string;
  image?: string;
  category?: string;
  brand?: string;
  description?: string;
  quantity: number;
}

interface CartContextType {
  cart: CartItem[];
  addToCart: (item: CartItem) => void;
  removeFromCart: (id: string) => void;
  clearCart: () => void;
  isInCart: (id: string) => boolean;
  increaseQuantity: (id: string) => void;  // Bu satır eklendi
  decreaseQuantity: (id: string) => void;  // Bu satır eklendi
  totalCart: () => number;  // Bu satır eklendi
}

const CartContext = createContext<CartContextType | undefined>(undefined);

export const useCart = () => {
  const context = useContext(CartContext);
  if (!context) {
    throw new Error("useCart must be used within a CartProvider");
  }
  return context;
};

export const CartProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
  const [cart, setCart] = useState<CartItem[]>([]);

  // Sayfa yüklendiğinde LocalStorage'dan verileri al
  useEffect(() => {
    const storedCart = localStorage.getItem("cart");
    if (storedCart) {
      setCart(JSON.parse(storedCart));
    }
  }, [setCart]);

  // Sepet değiştiğinde LocalStorage'a kaydet
  useEffect(() => {
    if (cart.length > 0) {
      localStorage.setItem("cart", JSON.stringify(cart));
    }
  }, [cart]);

  const addToCart = (item: CartItem, quantity: number = 1) => {
    setCart((prevCart) => {
      const updatedCart = prevCart.map((i) =>
        i.id === item.id ? { ...i, quantity: i.quantity + quantity } : i
      );
  
      if (prevCart.some((i) => i.id === item.id)) {
        localStorage.setItem("cart", JSON.stringify(updatedCart));
        return updatedCart;
      }
  
      const newCart = [...prevCart, { ...item, quantity }];
      localStorage.setItem("cart", JSON.stringify(newCart));
      return newCart;
    });
    toast.success('Ürün  listeye eklendi!');
  };
  

  const removeFromCart = (id: string) => {
    setCart((prevCart) => {
      const updatedCart = prevCart.filter((item) => item.id !== id);
      localStorage.setItem("cart", JSON.stringify(updatedCart)); // Burada da kaydediyoruz
      return updatedCart;
    });
    toast.error('Ürün listeden kaldırıldı!');
  };

  const clearCart = () => {
    setCart([]);
    localStorage.removeItem("cart"); // Sepet temizlendiğinde localStorage'dan da kaldır
  };

  const isInCart = (id: string): boolean => {
    return cart.some((item) => item.id === id);
  };

  // Quantity artırma fonksiyonu
  const increaseQuantity = (id: string) => {
    setCart((prevCart) =>
      prevCart.map((item) =>
        item.id === id ? { ...item, quantity: item.quantity + 1 } : item
      )
    );
  };

  // Quantity azaltma fonksiyonu
  const decreaseQuantity = (id: string) => {
    setCart((prevCart) => {
      return prevCart.map((item) =>
        item.id === id
          ? { ...item, quantity: item.quantity > 1 ? item.quantity - 1 : 1 }
          : item
      );
    });
  };


    // Toplam sepet adedini hesaplayan fonksiyon
    const totalCart = (): number => {
        return cart.reduce((total, item) => total + item.quantity, 0);
      };


  return (
    <CartContext.Provider
      value={{
        cart,
        addToCart,
        removeFromCart,
        clearCart,
        isInCart,
        increaseQuantity,
        decreaseQuantity,
        totalCart
      }}
    >
      {children}
    </CartContext.Provider>
  );
};
