/**
 *  自定义控件
 * @author lcy
 * @date 2021-01-25
 */
(function(KDApi, $){

    function POS (model) {
        this._setModel(model)
    }

    //原型中封装生命周期函数
    POS.prototype = {
        _setModel: function(model) {
            this.model = model
        },
        init: function(props){
            initFunc(this.model, props);
        },
        update: function(props){
            updateFunc(this.model,props);
        },
        destoryed: function(){

        }
    }

    var updateFunc = function(model,props){
        console.log("更新开始===========");
        console.log(props);
        var methodname = props.data && props.data.methodname || '';
        console.log(methodname);
        if(props.data && "HTTPCCBInterFace" == methodname){
            updateHttpCCB(model,props);
        }
        console.log("更新结束===========");
    }

    var initFunc = function(model, props) {
    }

    /**
     * CCB获取请求参数,并执行请求方法
     * @param {*} model 
     */
    var updateHttpCCB = function (model,props){
        var settleType = props.data && props.data.settleType || '';//交易类型
        var payAmt = props.data && props.data.payAmt || '';//金额
        var oldDate = props.data && props.data.oldDate || '';//原交易日期
        var txtOldRefSys = props.data && props.data.txtOldRefSys || '';//原系统参考号
        var txtTrace = props.data && props.data.txtTrace || '';//流水号(凭证号)
		var szFenqiNum = props.data && props.data.num || ''; //分期数
        var szGoodsCode = props.data && props.data.goodscode || ''; //商品项目编码
        var srsv = props.data && props.data.srsv || ''; //填充空格 20
        var sPrefer = props.data && props.data.sPrefer || '';//优惠券
        var sRsv = props.data && props.data.sRsv || '';//保留字段(二维码的条码数据)
        var sOrderNo = props.data && props.data.sOrderNo || ''; //商户交易订单号 30
        console.log("原交易金额="+payAmt+"-原分期数="+szFenqiNum);
        HTTPCCBInterFace(settleType,payAmt,oldDate,txtOldRefSys,txtTrace,szFenqiNum,szGoodsCode,srsv,sPrefer,sRsv,sOrderNo,model);
    }
	
    var HTTPCCBInterFace = function (settleType,payAmt,oldDate,txtOldRefSys,txtTrace,szFenqiNum,szGoodsCode,srsv,sPrefer,sRsv,sOrderNo,model){ 
        var strInput = "";
        var amtStr = subAmtStr(payAmt);
		payAmt = formatPayAmt(amtStr);
		szFenqiNum = parseFenQiNum(szFenqiNum);
        console.log("交易金额=" + payAmt+"-分期数="+szFenqiNum);
        var szrsv = srsv + Generater(' ', 20-srsv.length); //收银流水(订单)号
        var szPrefer = sPrefer + Generater(' ', 50-sPrefer.length); //优惠券      
        var szRsv = sRsv + Generater(' ', 300-sRsv.length); //保留字段(二维码的条码数据)
        var szOrderNo = sOrderNo + Generater(' ', 30-sOrderNo.length); //商户交易订单号
        
		//(收银机号8,操作员号8,交易类型2,金额12,原交易日期8,原参考号12,流水号(凭证号)6,原批次号6,原授权码6,
		//原交易终端8,分期数2,服务人数2,商品编码12,二磁道37,三磁道104,Lrc3,szrsv20,szPrefer50,szRsv300,szOrderNo30)
		if(settleType == '00'){			//00 消费：交易类型,金额
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '01'){	//01 撤销：交易类型,金额,原流水号(凭证号)
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + Generater(' ',8) + Generater(' ',12) + txtTrace + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '02'){	//02 退货：交易类型,金额,原交易参考号,原交易日期
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + oldDate + txtOldRefSys + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '04'){	//04 重打印：交易类型,原流水号(凭证号)
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + txtTrace + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
		else if(settleType == '14'){	//14 商场分期：交易类型,金额,分期数,商品项目编码 (商场分期数只能是03,06,09,12,18,24,36)
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + szFenqiNum + '  ' + szGoodsCode + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '16'){	//16 分期撤销：交易类型,原流水号(凭证号)
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '17'){	//17 分期退货：交易类型,金额,原交易参考号,原交易日期
            strInput = Generater(' ',8) + Generater(' ',8) +  settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '60'){	//60 微信/支付宝(聚合支付用户被扫)：交易类型,金额,保留字段(条码数据)
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6) 
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '62'){	//62 聚合支付退货：交易类型,金额
            strInput = Generater(' ',8) + Generater(' ',8) + settleType + payAmt + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
		else if(settleType == '66'){	//66 聚合支付扫码补单：交易类型,保留字段(订单数据)
            strInput = Generater(' ',8) + Generater(' ',8) +  settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '64'){	//64 单笔聚合支付异常订单查询：交易类型,保留字段(订单数据)
            strInput = Generater(' ',8) + Generater(' ',8) +  settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        else if(settleType == '72'){	//72 聚合支付异常订单查询：交易类型
            strInput = Generater(' ',8) + Generater(' ',8) +  settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        
        else if(settleType == 'XX'){	//优惠立减 优惠券(暂未确定)
            strInput = Generater(' ',8) + Generater(' ',8) +  settleType + Generater(' ',12) + Generater(' ',8) + Generater(' ',12) + Generater(' ',6) + Generater(' ',6) + Generater(' ',6)
             + Generater(' ',8) + '  ' + '  ' + Generater(' ',12) + Generater(' ',37) + Generater(' ',104) + Generater(' ',3) + szrsv + szPrefer + szRsv + szOrderNo;
        }
        console.log("strInput=" + strInput);

        var url = "http://127.0.0.1:5555";
        var requestStr = "getRequestDataByCCB";
        sendHttp(strInput,url,model,requestStr);
    }
    
    /**
     * send http request
     * @param {*} strInput request param
     * @param {*} url http url
     * @param {*} model model
     */
	var sendHttp = function(strInput,url,model,requestStr){
        var iRet;
		var xmlHttpRequest;  
		//1.创建XMLHttpRequest  
		if(window.ActiveXObject){ //如果是IE浏览器
            xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");  
        }else if(window.XMLHttpRequest){ //非IE浏览器  
            xmlHttpRequest = new XMLHttpRequest();  
        }     
        //2.设置回调函数  
        xmlHttpRequest.onreadystatechange = function(){
            //回调函数
            if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){  
                iRet = xmlHttpRequest.responseText;
                var data = parseCCBData(iRet);
                model.invoke(requestStr,data);
				console.log(data);
                //model.invoke('getRequestDataByCCB', iRet);
				//console.log("返回值：" + iRet);
			}  
        };  
        //3.初始化XMLHttpRequest组建  
        xmlHttpRequest.open("POST",url,true);  
        //4.发送请求  
        xmlHttpRequest.send(strInput);  
		console.log("请求参数：" + strInput);	
    }
	
	var parseCCBData = function(outPutData){
        console.log(outPutData);
        var code = outPutData.substr(0,2).trim();
        var bankCode = outPutData.substr(2,4).trim(); //银行行号 4
        var cardNo = outPutData.substr(6,30).trim(); //卡号 30
        var expr = outPutData.substr(36,4).trim(); //有效期 4
        var amount = outPutData.substr(40,12).trim(); //金额 12
        var trace = outPutData.substr(52,6).trim(); //流水号 6
        var refer = outPutData.substr(58,12).trim(); //参考号 12
        var auth = outPutData.substr(70,6).trim(); //授权号 6
        var batch = outPutData.substr(76,6).trim(); //批次号 6
        var date = outPutData.substr(82,14).trim(); //交易日期 14
        var userNo = outPutData.substr(96,15).trim(); //商户号 15
        var terNo = outPutData.substr(111,8).trim(); //终端号 8
        var oldTerNo = outPutData.substr(119,8).trim(); //原终端号 8
        var errorDesc = subChineseStr(outPutData,127,50).trim(); //错误说明 50
        var chineseNum = getChineseNum(errorDesc);
        var rsv = outPutData.substr(177-chineseNum,50).trim(); //保留字段 50
        var trans = outPutData.substr(227-chineseNum,2).trim(); //交易类型 2
        var channelType = outPutData.substr(229-chineseNum,2).trim(); //支付类型 2
        var lrc = outPutData.substr(231-chineseNum,3).trim(); //LRC校验码 3
        console.log(errorDesc+"-"+chineseNum+"-"+trans+"-"+lrc);
        console.log(code+"-"+bankCode+"-"+cardNo+"-"+expr+"-"+amount+"-"+trace+"-"+refer+"-"+auth+"-"+batch+"-"+date+"-"+userNo+"-"+terNo+"-"+oldTerNo+"-"+errorDesc+"-"+rsv+"-"+trans+"-"+channelType+"-"+lrc);

        //返回json对象
        var result = {
            code:code,
            data:{
                bankCode:bankCode,
                cardNo:cardNo,
                expr:expr,
                amount:amount,
                trace:trace,
                refer:refer,
                auth:auth,
                batch:batch,
                date:date,
                userNo:userNo,
                terNo:terNo,
                oldTerNo:oldTerNo,
                errorDesc:errorDesc,
                rsv:rsv,
                trans:trans,
                channelType:channelType,
                lrc:lrc
            }
        }
        return result;
    }
    
	/**
	 * 分期数处理
	 * 3 -> 03
	 */
	var parseFenQiNum = function(szFenqiNum){
		if(szFenqiNum.length == 1){
			szFenqiNum = "0" + szFenqiNum;
		}
		if(szFenqiNum.length == 0){
			szFenqiNum = "00";
		}
		return szFenqiNum;
	}

	
    //获取str的中文个数
	var getChineseNum = function(str){
		re = /[\u4E00-\u9FA5]/g; //中文字符的正则
		var num = str.match(re).length;  //计算中文的个数
		return num;
	}
	//截取带有中文的str
	var subChineseStr = function(str, begin ,len) {
		if((!str && typeof(str) != 'undefined')) {
			return '';
		}
		var num = 0;
		var strs = str;
		var str = '';
		for(var i = begin, lens = strs.length; i < lens; i++) {
			num += ((strs.charCodeAt(i) > 255) ? 2 : 1);
			if(num > len) {
				break;
			} else {
				str = strs.substring(begin, i+1);
			}
		}
		return str;
	}
    
	var Generater = function (resvr,len){
        var s = "";
        var i = 0;
        for(; i < len; ++i){
            s = s + resvr;
        }
        return s;
    }
	
    /**
     * 无论传入几位小数,此处暂按两位小数处理
     * eg:1.2355  -->  1.23
     * @param {*} str 
     */
	 var subAmtStr = function (str){
		var index = String(str).indexOf(".") + 1;
		var count = String(str).length - index;
        if(index=="0"){
            str = str+".00";
            return str;
        }else if(count=="1"){
			str = str+"0";
			return str;
		}	
        str = str.slice(0, index + 2);
        return str;
    }
	
    /**
     * 格式化输入的支付金额
     * eg:0.01  -->  001  -->  000000000001
     *    1.00  -->  100  -->  000000000100
     *    123450.23  -->  12345023  -->  000012345023
     * @param {*} str 
     */
    var formatPayAmt = function (str){
        str = str.replace(".","");
        while(str.length < 12){
            str = "0" + str;
        }
        return str;
    }
	
    KDApi.register('ccbpos_siping', POS)
})(window.KDApi, jQuery)