Current File : /home/tradevaly/www/fresh/lib/provider/cart_provider.dart
import 'package:flutter/material.dart';
import 'package:flutter_grocery/data/model/response/cart_model.dart';
import 'package:flutter_grocery/data/repository/cart_repo.dart';
import 'package:flutter_grocery/localization/language_constrants.dart';
import 'package:flutter_grocery/view/base/custom_snackbar.dart';
class CartProvider extends ChangeNotifier {
  final CartRepo cartRepo;
  CartProvider({@required this.cartRepo});

  int _productSelect = 0;
  int get productSelect => _productSelect;



  void setSelect(int select, bool isNotify){
    _productSelect = select;
    if(isNotify) {
      notifyListeners();
    }
  }

  List<CartModel> _cartList = [];
  double _amount = 0.0;

  List<CartModel> get cartList => _cartList;
  double get amount => _amount;

  void getCartData() {
    _cartList = [];
    _amount = 0.0;
    _cartList.addAll(cartRepo.getCartList());
    _cartList.forEach((cart) {
      _amount = _amount + (cart.discountedPrice * cart.quantity);
    });

  }

  void addToCart(CartModel cartModel) {
    _cartList.add(cartModel);
    cartRepo.addToCartList(_cartList);
    _amount = _amount + (cartModel.discountedPrice * cartModel.quantity);
    notifyListeners();
  }

  void setQuantity(bool isIncrement, int index, {bool showMessage = false, BuildContext context}) {

    if (isIncrement) {
      _cartList[index].quantity = _cartList[index].quantity + 1;
      _amount = _amount + _cartList[index].discountedPrice;
      if(showMessage) {
        showCustomSnackBar(getTranslated('quantity_increase_from_cart', context), context, isError: false);
      }
    } else {
      _cartList[index].quantity = _cartList[index].quantity - 1;
      _amount = _amount - _cartList[index].discountedPrice;
      if(showMessage) {
        showCustomSnackBar(getTranslated('quantity_decreased_from_cart', context), context);
      }
    }
    cartRepo.addToCartList(_cartList);

    notifyListeners();
  }

  void removeFromCart(int index, BuildContext context) {
    _amount = _amount - (cartList[index].discountedPrice * cartList[index].quantity);
    showCustomSnackBar(getTranslated('remove_from_cart', context), context);
    _cartList.removeAt(index);
    cartRepo.addToCartList(_cartList);
    notifyListeners();
  }

  void clearCartList() {
    _cartList = [];
    _amount = 0;
    cartRepo.addToCartList(_cartList);
    notifyListeners();
  }

  int isExistInCart(CartModel cartModel) {
    for(int index= 0; index<_cartList.length; index++) {
      if(_cartList[index].id == cartModel.id && (_cartList[index].variation != null ? _cartList[index].variation.type
          == cartModel.variation.type : true)) {
        return index;
      }
    }
    return null;
  }


}