/**
 * easypay api
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/11/04
 */
'use strict';

module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    getEasyPaymentAsync(uid, goods, activity) {
        let param = {
            method: 'app.Shopping.easyPayment',
            uid: uid,
            cart_type: 'ordinary',
            product_sku_list: goods,
            yoho_coin_mode: 0,
            is_support_apple_pay: 'N'
        };

        if (activity) {
            param.activity_id = activity;
        }

        return this.get({data: param});
    }

    /**
     * 订单计算API
     * @param uid [number] uid
     * @param cartType [string] 购物车类型,ordinary表示普通, advance表示预售
     * @param paymentType [number] 支付方式,1表示在线支付,2表示货到付款
     * @param deliveryWay [number] 配送方式,1表示普通快递,2表示顺丰速运
     * @param coin [number] 使用的有货币
     * @param useRedEnvelops [number] 红包
     * @param couponCode [string] 优惠券码
     * @param promotionCode [string] 优惠码
     * @param productSkuList [string] 限购商品
     */
    getEasypayComputeAsync(uid, cartType, paymentType, deliveryWay, other) {
        let param = {
            method: 'app.Shopping.easyCompute',
            uid: uid,
            cart_type: cartType || 'ordinary',
            payment_type: paymentType,
            delivery_way: deliveryWay
        };

        // 其他可选参数
        if (other) {
            if (other.coin) {
                Object.assign(param, {
                    use_yoho_coin: other.coin / 100
                });
            }

            if (other.useRedEnvelops) {
                Object.assign(param, {
                    use_red_envelopes: other.useRedEnvelops
                });
            }

            if (other.couponCode) {
                Object.assign(param, {
                    coupon_code: other.couponCode
                });
            }

            if (other.giftCard) {
                Object.assign(param, {
                    gift_card_code: other.giftCard
                });
            }

            if (other.promotionCode) {
                Object.assign(param, {
                    promotion_code: other.promotionCode
                });
            }

            if (other.productSkuList) {
                Object.assign(param, {
                    product_sku_list: other.productSkuList
                });

                if (other.bundle) {
                    Object.assign(param, {
                        activity_id: other.bundle
                    });
                }
            }
        }

        return this.get({data: param});
    }

    /**
     * 订单提交API
     * @param uid [number] uid
     * @param cartType [String] 购物车类型,ordinary表示普通, advance表示预售
     * @param addressId [String] 地址
     * @param deliveryTime [number] 寄送时间类型
     * @param deliveryWay [number] 配送方式,1表示普通快递,2表示顺丰速运
     * @param invoicesType [number] 发票类型
     * @param invoicesTitle [string] 发票抬头
     * @param invoicesContent [int] 发票类型
     * @param receiverMobile [string] 发票收人电话
     * @param coin [number] 使用的有货币金额
     * @param redEnvelopes [number] 使用的红包
     * @param paymentId [number] 支付id
     * @param paymentType [number] 支付类型
     * @param remark [string] 备注
     * @param couponCode [string] 优惠券码
     * @param printPrice [string] 是否打印价格
     */
    easypayOrderSubmitAsync(uid, cartType, addressId, deliveryTime, deliveryWay, paymentType, paymentId, printPrice, other, remoteIp) { // eslint-disable-line
        let param = {
            method: 'app.Shopping.easySubmit',
            uid: uid,
            cart_type: cartType || 'ordinary',
            address_id: addressId,
            delivery_time: deliveryTime,
            delivery_way: deliveryWay,
            payment_type: paymentType,
            payment_id: paymentId,
            is_print_price: printPrice
        };

        // 发票
        if (other.invoicesType) {
            Object.assign(param, {
                invoices_type: other.invoicesType,
                invoices_title: other.invoicesTitle,
                invoice_content: other.invoicesContent,
                receiverMobile: other.receiver
            });
        }

        // 有货币
        if (other.coin) {
            Object.assign(param, {
                use_yoho_coin: other.coin / 100 // 有货币稀释
            });
        }

        // 红包
        if (other.redEnvelopes) {
            Object.assign(param, {
                use_red_envelopes: other.redEnvelopes
            });
        }

        // 备注
        if (other.remark) {
            Object.assign(param, {
                remark: other.remark
            });
        }

        // 礼品卡
        if (other.giftCard) {
            Object.assign(param, {
                gift_card_code: other.giftCard
            });
        }

        // 优惠码
        if (other.promotionCode) {
            Object.assign(param, {
                promotion_code: other.promotionCode
            });
        }

        // 优惠券码
        if (other.couponCode) {
            Object.assign(param, {
                coupon_code: other.couponCode
            });
        }

        if (other.productSkuList) {
            Object.assign(param, {
                product_sku_list: other.productSkuList
            });

            if (other.bundle) {
                Object.assign(param, {
                    activity_id: other.bundle
                });
            }
        }

        if (other.udid) {
            Object.assign(param, {
                udid: other.udid
            });
        }

        return this.get({data: param, param: {
            headers: {
                'X-Forwarded-For': remoteIp || ''
            }
        }});
    }
};