var system = require("../../system")
const md5 = require("MD5");
const logCtl = system.getObject("web.oplogCtl");
const moment = require("moment");

class ChannelApi {
    constructor() {
        this.channelSve = system.getObject("service.channelSve");
        this.esettleSve = system.getObject("service.esettleSve");
        this.restClient = system.getObject("util.restClient");
        this.esettleofflineitemSve = system.getObject("service.esettleofflineitemSve");
        this.FQURL = "http://yunfuapi-dev.gongsibao.com/crm/order/submit";
        this.pushfqlogSve = system.getObject("service.pushfqlogSve")
        this.esettleofflineSve = system.getObject("service.esettleofflineSve")
    }

    //渠道绑定
    async bindPlatform(queryobj, qobj, req) {
        if (!this.trim(queryobj.platform_id)) {
            return system.getErrResult2("platform_id不能为空")
        }
        if (!this.trim(queryobj.channel_id)) {
            return system.getErrResult2("channel_id不能为空")
        }
        if (!this.trim(queryobj.platform_channel_id)) {
            return system.getErrResult2("platform_channel_id不能为空")
        }
        var result = await this.channelSve.bindPlatform(queryobj);
        return result;
    }

    //绑定渠道推送
    async pushbindingchannel(queryobj, qobj, req) {
        queryobj.begin = moment().subtract(1, 'days').format('YYYY-MM-DD 00:00:00'); /*前一天的时间*/
        queryobj.end = moment().subtract(1, 'days').format('YYYY-MM-DD 23:59:59'); /*前一天的时间*/
        var result = await this.channelSve.pushbindingchannel(queryobj);
        var data = result.data || [];
        if (data.length > 0) {
            for (let i = 0; i < data.length; i++) {
                if (data[i].channel_id == '10000' && data[i].origin_merchant_id != '') {
                    var busiData = await this.esettleSve.findBybusiId(data[i].origin_merchant_id);
                    if (busiData.length > 0) {
                        for (let j = 0; j < busiData.length; j++) {
                            var pushData = this.getBusiData(busiData[j], data[i]);
                            var rc = system.getObject("util.aliyunClient");
                            var rtn = null;
                            rtn = await rc.post(this.FQURL, pushData);
                            if (rtn.success == true) {
                                result.contractNo = rtn.data.contractNo;
                                result.topush = "0";
                                result.param = pushData.param;
                                this.pushfqlogSve.create(result)
                            } else {
                                result.topush = "-1";
                                result.errorMsg = rtn.errorMsg;
                                result.param = pushData.param;
                                this.pushfqlogSve.create(result)
                            }
                        }
                    }
                } else {
                    if (data[i].origin_merchant_id != '') {
                        var esettleoffline = await this.esettleofflineSve.findOne({"ecompany_id": data[i].origin_merchant_id});
                        if (esettleoffline != null) {
                            var pushData = this.getBusiDatas(esettleoffline.dataValues, data[i]);
                            var rc = system.getObject("util.aliyunClient");
                            var rtn = null;
                            rtn = await rc.post(this.FQURL, pushData);
                            // var result = JSON.parse(pushData.param);
                            if (rtn.success == true) {
                                result.contractNo = rtn.data.contractNo;
                                result.topush = "0";
                                result.param = pushData.param;
                                this.pushfqlogSve.create(result)
                            } else {
                                result.topush = "-1";
                                result.errorMsg = rtn.errorMsg;
                                result.param = pushData.param;
                                this.pushfqlogSve.create(result)
                            }
                        }
                    }
                }

            }
        }

    }

    async paydayCount(queryobj, qobj, req) {
        var data = await this.separateGet(queryobj);
        console.log(data.dataValues)
    }

    async paydayDetails(queryobj, qobj, req) {
        var data = await this.separateGet(queryobj);
    }


    async separateGet(queryobj) {
        let encry = system.decryption(queryobj.param);
        encry = JSON.parse(encry);
        if (encry.channel_id == 10000) {
            var busiData = await this.esettleSve.findByIdList(encry.data_id);
            return busiData;
        }
        var esettleoffline = await this.esettleofflineitemSve.find({"esettleoffline_id": encry.data_id});
        return esettleoffline;
    }

    getBusiData(da, chnanel) {
        var resultData = {
            "idempotentId": da.id.toString(),// 业务编号(订单id)
            "idempotentSource": "bpo_xbg",// 来源编号，写死：bpo_xbg
            "idempotentSourceName": "BPO",// 来源编号，写死：BPO薪必果
            "thirdPartyChannelId": chnanel.channel_id.toString(),// 渠道id
            "thirdPartyCustomerId": da.id.toString(),// 第三方客户id
            "productId": "5e6b02cc3290c3000a3a63dc",// 云服产品id (测试环境)
            // "allotRatio":"50",// 分润比例(百分比的数字部分（如：50代表50%）)
            "orderPrice": da.deduct_amt,// 订单金额
            "productQuantity": "1",// 产品数量
            "companyName": chnanel.merchant_name,// 公司名称
            "phone": chnanel.contact_mobile
        };
        var str = {
            "data_id": da.id,// 发薪批次id tbl_order.id 或者 c_esettle_offline.id
            "channel_id": chnanel.channel_id,//渠道id
            "channel_merchant_id": chnanel.id,//渠道商户id
            "origin_merchant_id": chnanel.origin_merchant_id,//来源商户id
            "platform_channel_id": chnanel.platform_id,//对方渠道id
        };
        let encry = System.encryption(JSON.stringify(str));
        resultData.param = encodeURIComponent(system.encryption(encry));
        return resultData;
    }

    getBusiDatas(da, chnanel) {
        var resultData = {
            "idempotentId": da.id.toString(),// 业务编号(订单id)
            "idempotentSource": "bpo_xbg",// 来源编号，写死：bpo_xbg
            "idempotentSourceName": "BPO",// 来源编号，写死：BPO薪必果
            "thirdPartyChannelId": chnanel.channel_id.toString(),// 渠道id
            "thirdPartyCustomerId": da.id.toString(),// 第三方客户id
            "productId": "5e6b02cc3290c3000a3a63dc",// 云服产品id (测试环境)
            // "allotRatio":"50",// 分润比例(百分比的数字部分（如：50代表50%）)
            "orderPrice": da.amt,// 订单金额
            "productQuantity": "1",// 产品数量
            "companyName": da.ecompanyName,// 公司名称
            "phone": chnanel.contact_mobile
        };
        var str = {
            "data_id": da.id,// 发薪批次id tbl_order.id 或者 c_esettle_offline.id
            "channel_id": chnanel.channel_id,//渠道id
            "channel_merchant_id": chnanel.id,//渠道商户id
            "origin_merchant_id": chnanel.origin_merchant_id,//来源商户id
            "platform_channel_id": chnanel.platform_id,//对方渠道id
        };
        resultData.param = encodeURIComponent(system.encryption(JSON.stringify(str)));
        return resultData;
    }


    async orderInfo(queryobj, qobj, req) {
        let param = system.decryption(queryobj.data);
        // {"data_id":17,"channel_id":10002,"channel_merchant_id":"0","origin_merchant_id":"10048","pushplatform_channel_id":10000}
        try {
            param = JSON.parse(param);
        } catch (error) {
            console.log(error);
            return system.getErrResult2("参数解析错误");
        }

        // 测试使用
        // param.channel_merchant_id = 1;
        // param.data_id = 511;

        if (!param.channel_merchant_id) {
            return system.getErrResult2("参数错误, 渠道商户不存在");
        }
        if (!param.data_id) {
            return system.getErrResult2("参数错误, 订单不存在");
        }
        let merchant = await this.channelSve.merchantInfo({ id: param.channel_merchant_id }) || {};
        merchant = merchant.data;
        if (!merchant) {
            return system.getErrResult2(`渠道商户${param.channel_merchant_id}不存在`);
        }

        let info = {
            merchantName: merchant.merchant_name
        };
        if (merchant.origin_id == 10000) {
            let order = await this.esettleSve.findTBLOrderById(param.data_id) || {};
            info.createTime = moment(order.create_time).format('YYYY-MM-DD HH:mm:ss');
            info.actualAmt = system.f2y(order.actual_amt);
            info.incomeTax = system.f2y(order.income_tax);
            info.serviceTax = system.f2y(order.service_tax);
            info.deductAmt = system.f2y(order.deduct_amt);
        } else {
            let order = await this.esettleofflineSve.findById(param.data_id);
            info.createTime = moment(order.created_at).format('YYYY-MM-DD HH:mm:ss');
            info.actualAmt = system.f2y(order.actual_amt);
            info.serviceTax = system.f2y(order.service_tax);
            info.deductAmt = system.f2y(order.amt);
            let incomeTax = await this.esettleofflineitemSve.sumIncome(order.id);
            info.incomeTax = system.f2y(incomeTax);
        }
        return system.getResult2(info);
    }

    async itemPage(queryobj, qobj, req) {
        let currentPage = Number(queryobj.currentPage || 1);
        let pageSize = Number(queryobj.pageSize || 10);
        let param = system.decryption(queryobj.data);
        // {"data_id":17,"channel_id":10002,"channel_merchant_id":"0","origin_merchant_id":"10048","pushplatform_channel_id":10000}
        try {
            param = JSON.parse(param);
        } catch (error) {
            console.log(error);
            return system.getErrResult2("参数解析错误");
        }

        // 测试使用
        // param.channel_merchant_id = 9;
        // param.data_id = "1209403539471060994";

        if (!param.channel_merchant_id) {
            return system.getErrResult2("参数错误, 渠道商户不存在");
        }
        if (!param.data_id) {
            return system.getErrResult2("参数错误, 订单不存在");
        }
        let merchant = await this.channelSve.merchantInfo({ id: param.channel_merchant_id }) || {};
        merchant = merchant.data;
        if (!merchant) {
            return system.getErrResult2(`渠道商户${param.channel_merchant_id}不存在`);
        }

        let page;
        if (merchant.origin_id == 10000) {
            page = await this.esettleSve.pageByOrderId(param.data_id, currentPage, pageSize);
        } else {
            page = await this.esettleofflineitemSve.pageByByOrderId(param.data_id, currentPage, pageSize);
            if(page.rows) {
                for(let row of page.rows) {
                    row.deduct_amt = row.amt;
                    row.trade_status = "02";
                }
            }
        }
        if(page && page.rows) {
            for(let row of page.rows) {
                row.actual_amt = system.f2y(row.actual_amt);
                row.income_tax = system.f2y(row.income_tax);
                row.service_tax = system.f2y(row.service_tax);
                row.deduct_amt = system.f2y(row.deduct_amt);
            }
        }
        return system.getResult2(page);
    }

    trim(o) {
        if (!o) {
            return "";
        }
        return o.toString().trim();
    }
}

module.exports = ChannelApi;
