'use client';

export interface CartItem {
    id: number;
    cartQuantity: number;
}

const CART_KEY = 'cart_products';
const CART_CHANGE_EVENT = 'cart-changed';

// Helper để dispatch event khi cart thay đổi
function notifyCartChange() {
    if (typeof window !== 'undefined') {
        window.dispatchEvent(new Event(CART_CHANGE_EVENT));
    }
}

// 1. Lấy danh sách sản phẩm trong giỏ
export function getCartItems(): CartItem[] {
    if (typeof window === 'undefined') return [];
    try {
        const raw = localStorage.getItem(CART_KEY);
        return raw ? (JSON.parse(raw) as CartItem[]) : [];
    } catch (error) {
        console.error('Invalid cart data', error);
        return [];
    }
}

// 2. Thêm sản phẩm vào giỏ
export function addProductToCart(productId: number, quantity: number = 1): { success: boolean; message: string; isNew: boolean } {
    if (typeof window === 'undefined') {
        return { success: false, message: 'Window is undefined', isNew: false };
    }
    
    const items = getCartItems();
    const existingItem = items.find(item => item.id === productId);
    
    if (existingItem) {
        existingItem.cartQuantity += quantity;
        localStorage.setItem(CART_KEY, JSON.stringify(items));
        notifyCartChange(); // Notify change
        return { 
            success: true, 
            message: `Đã cập nhật số lượng thành ${existingItem.cartQuantity}`, 
            isNew: false 
        };
    }
    
    items.push({ id: productId, cartQuantity: quantity });
    localStorage.setItem(CART_KEY, JSON.stringify(items));
    notifyCartChange(); // Notify change
    return { success: true, message: 'Đã thêm sản phẩm vào giỏ hàng', isNew: true };
}

// 3. Tăng số lượng sản phẩm
export function increaseQuantity(productId: number, amount: number = 1): boolean {
    if (typeof window === 'undefined') return false;
    
    const items = getCartItems();
    const item = items.find(item => item.id === productId);
    
    if (item) {
        item.cartQuantity += amount;
        localStorage.setItem(CART_KEY, JSON.stringify(items));
        notifyCartChange(); // Notify change
        return true;
    }
    return false;
}

// 4. Giảm số lượng sản phẩm
export function decreaseQuantity(productId: number, amount: number = 1): boolean {
    if (typeof window === 'undefined') return false;
    
    const items = getCartItems();
    const item = items.find(item => item.id === productId);
    
    if (item) {
        const newQuantity = item.cartQuantity - amount;
        if (newQuantity < 1) {
            return false;
        }
        item.cartQuantity = newQuantity;
        localStorage.setItem(CART_KEY, JSON.stringify(items));
        notifyCartChange(); // Notify change
        return true;
    }
    return false;
}

// 5. Update số lượng trực tiếp
export function updateQuantity(productId: number, cartQuantity: number): boolean {
    if (typeof window === 'undefined') return false;
    
    if (cartQuantity < 1) {
        return false;
    }
    
    const items = getCartItems();
    const item = items.find(item => item.id === productId);
    
    if (item) {
        item.cartQuantity = cartQuantity;
        localStorage.setItem(CART_KEY, JSON.stringify(items));
        notifyCartChange(); // Notify change
        return true;
    }
    return false;
}

// 6. Xóa 1 sản phẩm
export function removeProductFromCart(productId: number) {
    if (typeof window === 'undefined') return;
    
    const items = getCartItems();
    const newItems = items.filter(item => item.id !== productId);
    localStorage.setItem(CART_KEY, JSON.stringify(newItems));
    notifyCartChange(); // Notify change
}

// 7. Xóa toàn bộ giỏ hàng
export function clearCart() {
    if (typeof window === 'undefined') return;
    localStorage.removeItem(CART_KEY);
    notifyCartChange(); // Notify change
}

// 8. Lấy cartQuantity của 1 sản phẩm
export function getProductQuantity(productId: number): number {
    const items = getCartItems();
    const item = items.find(item => item.id === productId);
    return item?.cartQuantity ?? 0;
}

// 9. Kiểm tra sản phẩm có trong giỏ hàng không
export function isProductInCart(productId: number): boolean {
    const items = getCartItems();
    return items.some(item => item.id === productId);
}

// 10. Export event name để hooks sử dụng
export { CART_CHANGE_EVENT };