'use server';

import { cookies } from 'next/headers';
import { revalidatePath } from 'next/cache';


export async function updateCartQuantity(cartId: string, quantity: number) {
  try {
    if (!cartId || !quantity) {
      return {
        success: false,
        message: 'Cart ID and quantity are required',
      };
    }
    const API_BASE_URL = process.env.API_BASE_URL;
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;
    
    const baseUrl =process.env.NEXT_PUBLIC_BASE_URL;
    const response = await fetch(`${baseUrl}/api/cart/update`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': `token=${token}`,
      },
      body: JSON.stringify({ cart_id: cartId, quantity }),
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to update cart (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate the cart-related pages
    revalidatePath('/bag');
    revalidatePath('/payment');

    return result;
  } catch (error: any) {
    console.error('Cart Update Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to update cart',
    };
  }
}

export async function removeFromCart(cartId: string) {
  try {
    if (!cartId) {
      return {
        success: false,
        message: 'Cart ID is required',
      };
    }

    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;
    
    const API_BASE_URL = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    const response = await fetch(`${API_BASE_URL}/api/cart/remove/${cartId}`, {
      method: 'DELETE',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': `token=${token}`,
      },
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to remove item (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate the cart-related pages
    revalidatePath('/bag');
    revalidatePath('/payment');

    return result;
  } catch (error: any) {
    console.error('Cart Remove Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to remove item',
    };
  }
}

export async function getCartList() {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;
    
   
    const response = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}/api/cart/list`, {
      method: 'GET',
      headers: {
        'Cookie': `token=${token}`,
      },
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to fetch cart (${response.status})`,
        data: [],
      };
    }

    const result = await response.json();
    return result;
  } catch (error: any) {
    console.error('Cart List Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to fetch cart',
      data: [],
    };
  }
}

export async function addToCart(productId: string, size: string, variationType: string, price: number) {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;

    // Check if user is logged in
    if (!token) {
      return {
        success: false,
        message: 'Please login to add items to your bag',
      };
    }
    
    const API_BASE_URL = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    const response = await fetch(`${API_BASE_URL}/api/cart/add`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': `token=${token}`,
      },
      body: JSON.stringify({
        product_id: productId,
        size,
        variation_type: variationType,
        price,
      }),
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to add to cart (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate the cart-related pages
    revalidatePath('/bag');
    revalidatePath('/payment');

    return result;
  } catch (error: any) {
    console.error('Add to Cart Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to add to cart',
    };
  }
}
