using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Common;
using PTMedicalInsurance.Entity;
using PTMedicalInsurance.Forms;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Variables;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PTMedicalInsurance.Business.Core.Process
{
    class ReadCardProcess : AbstractProcess
    {
        public override CallResult Process(JObject input)
        {
            outParam = "";
            string errorMsg = "";
            string sInput = "";
            string sOutPar;
            JObject joCardInfo = new JObject();
            ChooseCard cc = new ChooseCard();
            CardReader_HN CardRead = new CardReader_HN();
            try
            {
                if (cc.ShowDialog() == DialogResult.OK)
                {
                    #region【1101获取身份信息】
                    JObject joData = new JObject();
                    joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
                    joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
                    joData.Add("card_sn", Global.pat.card.SN);
                    joData.Add("begntime", "");
                    joData.Add("psn_cert_type", Global.pat.certType);
                    joData.Add("certno", Global.pat.certNO); //证件号码
                    joData.Add("psn_name", Global.pat.name);
                    JObject joInput = new JObject();
                    joInput.Add("data", joData);
                    InvokeHelper invoker = new InvokeHelper();
                    JObject joRtn = invoker.invokeCenterService("1101", JsonHelper.setCenterInpar("1101", joInput));
                    if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
                    {
                        outParam = "读卡失败:" + errorMsg;
                        return Exception(-1, "读卡", outParam);
                    }
                    else
                    {
                        //joRtn.Add("cardinfo",joCardInfo);                    
                        outParam = joRtn.ToString();
                        Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地                    
                                                                                                                                        //Global.pat.card.NO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.insuplc_admdvs");        //社会保障号码
                        Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno");            //证件号码
                        Global.pat.card.SN = "";                                                                                   //卡识别码                                                
                        Global.pat.name = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_name");            //姓名
                        Global.pat.certType = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_cert_type");   //人员证件类型
                        Global.pat.mdtrtcertType = "02";                                                                           //就诊凭证类型
                        Global.pat.mdtrtcertNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno");       //就诊凭证编号
                        Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno");            //证件号码
                        Global.pat.psn_no = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_no");            //人员编号
                        Global.pat.emp_name = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.emp_name");        //单位名称
                        Global.pat.insuType = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insutype");        //险种类型
                                                                                                                                   //Global.pat.psn_type = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.psn_type");        //人员类别
                        Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(outParam), "output.exp_content.ectoken");        //电子令牌
                        //if (Global.pat.ecToken != "")
                        //{
                        //    Global.pat.mdtrtcertType = "01";
                        //    Global.pat.mdtrtcertNO = Global.pat.ecToken;
                        //}
                        outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
                        return Success();
                    }
                    #endregion
                }
                else
                {
                    outParam = "收款员取消读卡!";
                    return Exception(-2, "读卡", outParam);
                }
                if (trade1101(out outParam) == 0)
                {
                    return Success();
                }
                else
                {
                    return Exception(-2, "1101读取", outParam);
                }
                
            }
            catch (Exception ex)
            {
                outParam = "异常:" + ex.Message;
                return Exception(-2, "读卡", outParam);
            }
        }
        /// 
        /// 通过证件号获取基本信息(无卡)
        /// 
        /// 
        /// 
        /// 
        public int trade1101(out string outParam)
        {
            #region【1101获取身份信息】
            JObject joData = new JObject();
            joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
            joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
            joData.Add("card_sn", Global.pat.card.SN);
            joData.Add("begntime", "");
            joData.Add("psn_cert_type", Global.pat.certType);
            joData.Add("certno", Global.pat.certNO); //证件号码
            joData.Add("psn_name", Global.pat.name);
            JObject joInput = new JObject();
            joInput.Add("data", joData);
            //InvokeHelper invoker = new InvokeHelper();
            JObject joRtn = invoker.invokeCenterService("1101", JsonHelper.setCenterInpar("1101", joInput));
            if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
            {
                outParam = "读卡失败:" + outParam;
                return -1;
            }
            else
            {
                //joRtn.Add("cardinfo",joCardInfo);                    
                outParam = joRtn.ToString();
                Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地
                Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno"); //证件号码
                Global.pat.psn_no = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_no"); //人员编号
                outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
                return 0;
            }
            #endregion
        }
    }
}