using BasePaySdk.Request;
using BasePaySdk;
using Newtonsoft.Json;
using System.Collections.Generic;
using System;
using JiaZhiQuan.Common.Config;
using Newtonsoft.Json.Linq;
using static JiaZhiQuan.Common.Models.CommonConst;
using Wicture.DbRESTFul;

namespace JiaZhiQuan.Common.JuheAPI.HuiFu {
    public class HuiFuApiRefund {
        public static BaseRequest InitReq(HuiFuCommonConfig huifuConf,
            HuiFuRefundInfo info) {
            // 2.组装请求参数
            V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
            // 请求日期
            request.setReqDate(DateTime.Now.ToString("yyyyMMdd"));
            // 请求流水号
            request.setReqSeqId(info.reqId);
            // 商户号
            request.setHuifuId(huifuConf.sys_id);
            // 申请退款金额
            request.setOrdAmt(CommonUtils.DivideAndRound(info.ord_amt, UNIT).ToString("0.00"));
            if (huifuConf.isDev) {
                request.setOrdAmt("0.01");//测试
            }
            
            // 原交易请求日期
            request.setOrgReqDate(info.org_req_date);

            // 设置非必填字段
            Dictionary<string, object> extendInfoMap = getExtendInfos(huifuConf, info);
            request.setExtendInfo(extendInfoMap);
            return request;
        }

        /**
         * 非必填字段
         * @return
         */
        private static Dictionary<string, object> getExtendInfos(HuiFuCommonConfig huifuConf,
            HuiFuRefundInfo info) {
            // 设置非必填字段
            Dictionary<string, object> extendInfoMap = new Dictionary<string, object>();
            // 原交易全局流水号
            //extendInfoMap.Add("org_hf_seq_id", "002900TOP3B221107142320P992ac139c0c00000");
            // 原交易微信支付宝的商户单号
            // extendInfoMap.Add("org_party_order_id", "");
            // 原交易请求流水号
             extendInfoMap.Add("org_req_seq_id", info.org_req_seq_id);
            // 分账对象
            // extendInfoMap.Add("acct_split_bunch", getAcctSplitBunchRucan());
            // 聚合正扫微信拓展参数集合
            // extendInfoMap.Add("wx_data", getWxData());
            // 数字货币扩展参数集合
            // extendInfoMap.Add("digital_currency_data", getDigitalCurrencyData());
            // 补贴支付信息
            // extendInfoMap.Add("combinedpay_data", getCombinedpayData());
            // 备注
             //extendInfoMap.Add("remark", JsonConvert.SerializeObject(info.Remark));
            // 是否垫资退款
            // extendInfoMap.Add("loan_flag", "");
            // 垫资承担者
            // extendInfoMap.Add("loan_undertaker", "");
            // 垫资账户类型
            // extendInfoMap.Add("loan_acct_type", "");
            // 安全信息
            // extendInfoMap.Add("risk_check_data", getRiskCheckData());
            // 设备信息
            // extendInfoMap.Add("terminal_device_data", getTerminalDeviceData());
            // 异步通知地址
            extendInfoMap.Add("notify_url", info.notifyUrl);
            // 银联参数集合
            // extendInfoMap.Add("unionpay_data", getUnionpayData());
            return extendInfoMap;
        }

        private static object getAcctInfosRucan() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 分账金额
            // obj.Add("div_amt", "test");
            // 分账接收方ID
            // obj.Add("huifu_id", "test");
            // 垫资金额
            // obj.Add("part_loan_amt", "");

            JArray objList = new JArray();
            objList.Add(JToken.FromObject(obj));
            return objList;
        }
        private static string getAcctSplitBunchRucan() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 分账信息列表
            // obj.Add("acct_infos", getAcctInfosRucan());

            return JsonConvert.SerializeObject(obj);
        }
        private static object getGoodsDetail() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 商品编码
            // obj.Add("goods_id", "test");
            // 优惠退款金额
            // obj.Add("refund_amount", "test");
            // 商品退货数量
            // obj.Add("refund_quantity", "test");
            // 商品单价
            // obj.Add("price", "test");

            JArray objList = new JArray();
            objList.Add(JToken.FromObject(obj));
            return objList;
        }
        private static object getDetail() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 商品详情列表
            // obj.Add("goods_detail", getGoodsDetail());

            return obj;
        }
        private static object getWxData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 退款商品详情
            // obj.Add("detail", getDetail());

            return obj;
        }
        private static string getDigitalCurrencyData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 退款原因
            // obj.Add("refund_desc", "");

            return JsonConvert.SerializeObject(obj);
        }
        private static string getCombinedpayData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 补贴方汇付编号
            // obj.Add("huifu_id", "test");
            // 补贴方类型
            // obj.Add("user_type", "test");
            // 补贴方账户号
            // obj.Add("acct_id", "test");
            // 补贴金额
            // obj.Add("amount", "test");

            JArray objList = new JArray();
            objList.Add(JToken.FromObject(obj));
            return JsonConvert.SerializeObject(objList);
        }
        private static string getRiskCheckData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // ip地址
            // obj.Add("ip_addr", "");
            // 基站地址
            // obj.Add("base_station", "");
            // 纬度
            // obj.Add("latitude", "");
            // 经度
            // obj.Add("longitude", "");

            return JsonConvert.SerializeObject(obj);
        }
        private static string getTerminalDeviceData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 设备类型
            // obj.Add("device_type", "");
            // 交易设备IP
            // obj.Add("device_ip", "");
            // 交易设备MAC
            // obj.Add("device_mac", "");
            // 交易设备IMEI
            // obj.Add("device_imei", "");
            // 交易设备IMSI
            // obj.Add("device_imsi", "");
            // 交易设备ICCID
            // obj.Add("device_icc_id", "");
            // 交易设备WIFIMAC
            // obj.Add("device_wifi_mac", "");
            // 交易设备GPS
            // obj.Add("device_gps", "");

            return JsonConvert.SerializeObject(obj);
        }
        private static string getUnionpayData() {
            Dictionary<string, object> obj = new Dictionary<string, object>();
            // 收款方附加数据
            // obj.Add("addn_data", "");

            return JsonConvert.SerializeObject(obj);
        }
    }
}
