app.factory("cart", function($http, config, $q) {
  return {
    quantityUpdate: function(qty, cart_id) {
      var q = $q.defer();
      var suggestURL = config.cartupdate;
      let data = {
        cart_id: cart_id,
        quantity: qty
      };
      let token = $.cookie("vcartAuth")
        ? JSON.parse($.cookie("vcartAuth"))
        : "";
      $http({
        method: "POST",
        url: suggestURL,
        type: "json",
        data: data,
        headers: {
          Authorization: "Bearer " + token.token,
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    },
    removeCart: function(productData, userData) {
      var q = $q.defer();
      var suggestURL = config.cartRemove;
      var data = productData;
      $http({
        method: "DELETE",
        url: suggestURL,
        type: "json",
        data: data,
        headers: {
          Authorization: "Bearer " + userData,
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    },
    verifyCoupon: function(coupon, total, userData) {
      var q = $q.defer();
      var suggestURL =
        config.checkCoupon + "?coupon_code=" + coupon + "&grand_total=" + total;
      $http({
        method: "GET",
        url: suggestURL,
        type: "json",
        headers: {
          Authorization: "Bearer " + userData,
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    },
    removeUserbundle: function(id, userData) {
      var q = $q.defer();
      var suggestURL = config.deleteUserBundle + "?ub_id=" + id;
      $http({
        method: "DELETE",
        url: suggestURL,
        type: "json",
        headers: {
          Authorization: "Bearer " + userData,
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    },
    updateBundleName: function(data, userData) {
      var q = $q.defer();
      var suggestURL = config.updateBundleName;
      $http({
        method: "PATCH",
        url: suggestURL,
        data: data,
        type: "json",
        headers: {
          Authorization: "Bearer " + userData,
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    },
    getsetting: function() {
      var q = $q.defer();
      var suggestURL = config.settings;
      $http({
        method: "GET",
        url: suggestURL,
        type: "json",
        headers: {
          "Content-Type": "application/json"
        }
      })
        .then(function(success) {
          q.resolve(success);
        })
        .catch(function(err) {
          q.reject(err);
        });
      return q.promise;
    }
  };
});