import 'package:get/get.dart';
import '../models/product_model.dart';
import '../models/product_model1.dart';

class CartController extends GetxController {
  var cartList = <Product>[].obs;
  var cartCount = 0.obs;
  var subtotal = 0.0.obs;
  var gstTotal = 0.0.obs;
  var grandTotal = 0.0.obs;

  // Track the selected products
  var selectedProducts = <Product>[].obs;

  @override
  void onInit() {
    super.onInit();
    // Initialize the cart list or other initializations if needed
    initializeSelections();
  }

  void addToCart(Product product) {
    var existingProduct = cartList.firstWhereOrNull((p) => p.id == product.id);
    if (existingProduct != null) {
      existingProduct.quantity++;
    } else {
      cartList.add(product);
    }
    cartCount.value = cartList.length;
    updateTotalPrice();
  }

  void updateTotalPrice() {
    double subTotal = 0.0;
    double gstTotalAmount = 0.0;

    for (var product in selectedProducts) {
      subTotal += product.price * product.quantity;
      gstTotalAmount += (product.price * product.quantity * (product.gst / 100));
    }

    subtotal.value = subTotal;
    gstTotal.value = gstTotalAmount;
    grandTotal.value = subtotal.value + gstTotal.value;
  }

  void increaseQuantity(Product product) {
    final index = cartList.indexWhere((item) => item.id == product.id);
    if (index != -1) {
      cartList[index].quantity++;
      if (selectedProducts.contains(cartList[index])) {
        updateTotalPrice();
      }
    }
  }

  void decreaseQuantity(Product product) {
    final index = cartList.indexWhere((item) => item.id == product.id);
    if (index != -1 && cartList[index].quantity > 1) {
      cartList[index].quantity--;
      if (selectedProducts.contains(cartList[index])) {
        updateTotalPrice();
      }
    }
  }

  void removeFromCart(Product product) {
    cartList.removeWhere((item) => item.id == product.id);
    selectedProducts.remove(product);
    cartCount.value = cartList.length;
    updateTotalPrice();
  }

  void toggleProductSelection(Product product, bool isSelected) {
    if (isSelected) {
      if (!selectedProducts.contains(product)) {
        selectedProducts.add(product);
      }
    } else {
      selectedProducts.remove(product);
    }
    updateTotalPrice();
  }

  void selectAllProducts(bool selectAll) {
    if (selectAll) {
      selectedProducts.assignAll(cartList);
    } else {
      selectedProducts.clear();
    }
    updateTotalPrice();
  }

  void initializeSelections() {
    selectAllProducts(true);
  }
}





// import 'package:get/get.dart';
// import '../models/product_model.dart';
// import 'package:collection/collection.dart';
//
// import '../models/product_model1.dart';
//
// class CartController extends GetxController {
//
//   var cartList = <Product>[].obs;
//   var cartCount = 0.obs;
//   var subtotal = 0.0.obs;
//   var gstTotal = 0.0.obs;
//   var grandTotal = 0.0.obs;
//
//   // Add item to cart
//   void addToCart(Product product) {
//     var existingProduct = cartList.firstWhereOrNull((p) => p.id == product.id);
//     if (existingProduct != null) {
//       // Update quantity if already in cart
//       existingProduct.quantity++;
//     } else {
//       // Add new product to cart
//       cartList.add(product);
//     }
//     cartCount.value = cartList.length;
//     updateTotalPrice();
//   }
//
//   void updateTotalPrice() {
//     double subTotal = 0.0;
//     double gstTotalAmount = 0.0;
//
//     for (var product in cartList.where((p) => p.selected)) {
//       subTotal += product.price * product.quantity;
//       gstTotalAmount += (product.price * product.quantity * (product.gst / 100));
//     }
//
//     subtotal.value = subTotal;
//     gstTotal.value = gstTotalAmount;
//     grandTotal.value = subtotal.value + gstTotal.value;
//   }
//
//   // Increase the quantity of a product
//   void increaseQuantity(Product product) {
//     final index = cartList.indexWhere((item) => item.id == product.id);
//     if (index != -1) {
//       cartList[index].quantity++;
//       updateTotalPrice();
//     }
//   }
//
//   // Decrease the quantity of a product
//   void decreaseQuantity(Product product) {
//     final index = cartList.indexWhere((item) => item.id == product.id);
//     if (index != -1 && cartList[index].quantity > 1) {
//       cartList[index].quantity--;
//       updateTotalPrice();
//     }
//   }
//
//   // Remove item from cart
//   void removeFromCart(Product product) {
//     cartList.removeWhere((item) => item.id == product.id);
//     cartCount.value = cartList.length;
//     updateTotalPrice();
//   }
//
//   // Toggle product selection
//   void toggleProductSelection(Product product, bool isSelected) {
//     final index = cartList.indexWhere((item) => item.id == product.id);
//     if (index != -1) {
//       cartList[index].selected = isSelected;
//       updateTotalPrice();
//     }
//   }
// }
