@Override
public Coupon createCoupon(Coupon coupon) throws IOException, ApiException {
FormBody.Builder build = new FormBody.Builder()
.add("code", coupon.getCode())
.add("effective_on", coupon.getEffective().getType());
switch (coupon.getEffective().getType()) {
case "packages":
for (Integer id1 : coupon.getEffective().getPackages()) {
build.add("packages[]", Integer.toString(id1));
for (Integer id2 : coupon.getEffective().getCategories()) {
build.add("categories[]", Integer.toString(id2));
RequestBody body = build.add("discount_type", coupon.getDiscount().getType())
.add("discount_amount", coupon.getDiscount().getValue().toPlainString())
.add("discount_percentage", coupon.getDiscount().getPercentage().toPlainString())
.add("expire_type", coupon.getExpire().getType())
.add("expire_limit", Integer.toString(coupon.getExpire().getLimit()))
.add("expire_date", new SimpleDateFormat(API_DATE_FORMAT).format(coupon.getExpire().getDate()))
.add("start_date", new SimpleDateFormat(API_DATE_FORMAT).format(coupon.getStartDate()))
.add("basket_type", coupon.getBasketType())
.add("minimum", coupon.getMinimum().toPlainString())
.add("redeem_limit", Integer.toString(coupon.getUserLimit()))
.add("discount_application_method", Integer.toString(coupon.getDiscountMethod()))
.add("redeem_unlimited", coupon.getRedeemUnlimited() == 1 ? "true" : "false")
.add("expire_never", coupon.getExpireNever() == 1 ? "true" : "false")
.add("username", coupon.getUsername() == null ? "" : coupon.getUsername())
.add("note", coupon.getNote() == null ? "" : coupon.getNote())
.build();