using HH.YiDaSyncNC.Dtos;
using HH.YiDaSyncNC.Dtos.NC;
using HH.YiDaSyncNC.Dtos.YIDA;
using HH.YiDaSyncNC.Helper;
using HH.YiDaSyncNC.Models;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace HH.YiDaSyncNC.DataSync
{
    public class FKGL_SyncService
    {
        public string _AppType;
        public string _SystemToken;
        public string _UserId;
        public string _FormId;
        public SqlSugarClient _db;
        public SqlSugarClient _db_nc;
        public string _NCApiUrl;

        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];

        public FKGL_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
        {
            _AppType = AppType;
            _SystemToken = SystemToken;
            _UserId = UserId;
            _FormId = FormId;
            _db = db;
            _db_nc = db_nc;
            _NCApiUrl = NCApiUrl;
        }

        public void DataSync()
        {
            //try
            //{

            //    DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);

            //    // 宜搭全量数据Id
            //    var serchKeyListJson = new
            //    {
            //        radioField_lycrvvtk = "Y",
            //        selectField_lrnh633d = "预付",

            //    };
            //    var idList = _dingTalkService.GetFormIdList(JsonConvert.SerializeObject(serchKeyListJson));
            //    //LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
            //    #region 获取NC中选项数据的Id
            //    var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
            //    var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
            //    var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
            //    var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
            //    var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
            //    var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
            //    var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
            //    var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
            //    var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
            //    var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
            //    #endregion

            //    foreach (var item in idList)
            //    {
            //        string createTime = "";
            //        string modifyTime = "";

            //        var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
            //        string jsonData = JsonConvert.SerializeObject(ydDataSource);
            //        YiDa_SKDNC thisYiDaData = JsonConvert.DeserializeObject<YiDa_SKDNC>(jsonData);

            //        if (string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) continue;
            //        //取值 宜搭表单的某个字段当作凭证日期 如果 支付完成时间 为null，就用 提交时间
            //        DateTime 凭证日期 = DateTime.Now;
            //        //thisYiDaData.dateField_lwitiobz is null
            //        //    ? UnixTimeHelper.ConvertMillisecondsToDateTime(thisYiDaData.dateField_lviv4sfy)
            //        //    : UnixTimeHelper.ConvertMillisecondsToDateTime((long)thisYiDaData.dateField_lwitiobz);
            //        string 组织 = "";
            //        if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb))
            //        {
            //            var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb);
            //            if (tempData != null)
            //            {
            //                组织 = tempData.code; // 组织
            //            }
            //        }


            //        string 账簿 = "";
            //        if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb))
            //        {
            //            var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb + "-蓝云账簿");
            //            if (tempData != null)
            //            {
            //                账簿 = tempData.code; // 账簿
            //            }
            //        }
            //        string 制单人 = "OA-NC";

            //        // 表头
            //        var headModel = new FKGL_SyncServiceModel.DataModel.voucher_header()
            //        {
            //            year = 凭证日期.ToString("yyyy"),//会计年度
            //            prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期
            //            period = 凭证日期.ToString("MM"),//会计期间
            //            pk_prepared = 制单人,//凭证制单人--操作员工工号
            //            no = "",//凭证号
            //            pk_accountingbook = 账簿,//账簿
            //            org = 组织,//组织编码
            //            pk_vouchertype = "03",//凭证类别 ： 01-记账凭证 ，02-收款凭证 ，03-付款凭证 ，04-转账凭证 要确定
            //        };
            //        //表体
            //        var detailList = new List<FKGL_SyncServiceModel.DataModel.voucher_body>();

            //        #region 例子
            //        //if (thisYiDaData.tableField_lrngrtgu != null)
            //        //{
            //            ////循环内是借方分录赋值
            //            //foreach (var objItem in detailObjList1)
            //            //{


            //            //    var detailItem = new FKGL_SyncServiceModel.DataModel.voucher_body()
            //            //    {
            //            //        detailindex = index,
            //            //        accsubjcode = objItem.textField_lwitioce,//科目编码 要确定
            //            //        pk_accasoa = objItem.textField_lwitioce,//科目编码 要确定
            //            //        explanation = objItem.textField_lvxa4v05,//摘要 要确定
            //            //        verifydate = 凭证日期.ToString("yyyy-MM-dd"),
            //            //        price = "0.00000000",
            //            //        excrate2 = "1",
            //            //        debitquantity = "0.00000000",
            //            //        debitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定
            //            //        groupdebitamount = "0.00000000",
            //            //        globaldebitamount = "0.00000000",
            //            //        localdebitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定
            //            //        creditquantity = "0.00000000",
            //            //        creditamount = "0.00000000",
            //            //        groupcreditamount = "0.00000000",
            //            //        globalcreditamount = "0.00000000",
            //            //        localcreditamount = "0.00000000",
            //            //        billtype = "",
            //            //        bankaccount = "",
            //            //        checkstyle = "",
            //            //        checkno = "",
            //            //        checkdate = "",
            //            //        bill_id = "",
            //            //        bill_date = "",
            //            //        pk_currtype = "CNY",
            //            //        cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 要确定
            //            //        {
            //            //            m_pk_currtype = "CNY",
            //            //            money = objItem.numberField_lvxa4v09.ToString(),//金额 要确定
            //            //            moneymain = objItem.numberField_lvxa4v09.ToString(),//金额 要确定
            //            //            moneygroup = "",
            //            //            moneyglobal = "",
            //            //            pk_cashflow = "1124",//写死目前 要确定
            //            //            pk_innercorp = "",
            //            //        },
            //            //        ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//要确定
            //            //        {
            //            //            new FKGL_SyncServiceModel.DataModel.ass()
            //            //            {
            //            //                pk_Checktype ="0010",//0010-项目辅助核算 要确定
            //            //                pk_Checkvalue = "XM00368",//项目编码 目前写死 要确定
            //            //            }
            //            //        },
            //            //    };
            //            //    detailList.Add(detailItem);
            //            //    //销项税分录 要确认
            //            //    detailList.Add(
            //            //        new FKGL_SyncServiceModel.DataModel.voucher_body()
            //            //        {
            //            //            detailindex = index + 1,
            //            //            accsubjcode = "22210103",//科目编码 要确定
            //            //            pk_accasoa = "22210103",//科目编码 要确定
            //            //            explanation = objItem.textField_lvxa4v05,//摘要 要确定
            //            //            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
            //            //            price = "0.00000000",
            //            //            excrate2 = "1",
            //            //            debitquantity = "0.00000000",
            //            //            debitamount = objItem.numberField_lvxa4v08.ToString(),//借方金额 要确定
            //            //            groupdebitamount = "0.00000000",
            //            //            globaldebitamount = "0.00000000",
            //            //            localdebitamount = objItem.numberField_lvxa4v08.ToString(),//借方金额 要确定
            //            //            creditquantity = "0.00000000",
            //            //            creditamount = "0.00000000",//贷方金额
            //            //            groupcreditamount = "0.00000000",
            //            //            globalcreditamount = "0.00000000",
            //            //            localcreditamount = "0.00000000",//贷方金额
            //            //            billtype = "",
            //            //            bankaccount = "",
            //            //            checkstyle = "",
            //            //            checkno = "",
            //            //            checkdate = "",
            //            //            bill_id = "",
            //            //            bill_date = "",
            //            //            pk_currtype = "CNY",
            //            //            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 要确定
            //            //            {
            //            //                m_pk_currtype = "CNY",
            //            //                money = objItem.numberField_lvxa4v08.ToString(),//金额 要确定
            //            //                moneymain = objItem.numberField_lvxa4v08.ToString(),//金额 要确定
            //            //                moneygroup = "",
            //            //                moneyglobal = "",
            //            //                pk_cashflow = "1124",//写死目前 要确定
            //            //                pk_innercorp = "",
            //            //            },
            //            //            ass = new List<FKGL_SyncServiceModel.DataModel.ass>()
            //            //            {
            //            //            },
            //            //        }
            //            //        );
            //            //    index++;
            //            //}
            //            ////销项税分录 要确认
            //            ////贷方
            //            //detailList.Add(
            //            //    new FKGL_SyncServiceModel.DataModel.voucher_body()
            //            //    {
            //            //        detailindex = index,
            //            //        accsubjcode = "100204",//科目编码 要确定 用哪个贷方科目？ 100204-光大银行
            //            //        pk_accasoa = "100204",//科目编码 要确定 用哪个贷方科目？
            //            //        explanation = "贷方摘要",//摘要 要确定
            //            //        verifydate = 凭证日期.ToString("yyyy-MM-dd"),
            //            //        price = "0.00000000",
            //            //        excrate2 = "1",
            //            //        debitquantity = "0.00000000",
            //            //        debitamount = "0.00000000",
            //            //        groupdebitamount = "0.00000000",
            //            //        globaldebitamount = "0.00000000",
            //            //        localdebitamount = "0.00000000",
            //            //        creditquantity = "0.00000000",
            //            //        creditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 要确定
            //            //        groupcreditamount = "0.00000000",
            //            //        globalcreditamount = "0.00000000",
            //            //        localcreditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 要确定
            //            //        billtype = "",
            //            //        bankaccount = "",
            //            //        checkstyle = "",
            //            //        checkno = "",
            //            //        checkdate = "",
            //            //        bill_id = "",
            //            //        bill_date = "",
            //            //        pk_currtype = "CNY",
            //            //        cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()
            //            //        {
            //            //        },
            //            //        ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//辅助核算 要确定
            //            //        {
            //            //            new FKGL_SyncServiceModel.DataModel.ass()
            //            //            {
            //            //                pk_Checktype ="0011",//0011-银行账户辅助核算 要确定
            //            //                pk_Checkvalue = "36640188000164043",//银行账户 目前写死（36640188000164043：上海蓝云环境科技有限公司（光大银行）） 要确定
            //            //            }
            //            //        },
            //            //    }
            //            //);
            //        //}

            //        #endregion

            //        //借方分录
            //        detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body()
            //        {
            //            detailindex = 1,
            //            accsubjcode = "1123",//科目编码 预付账款
            //            pk_accasoa = "1123",//科目编码 
            //            explanation = "借方摘要",//摘要 
            //            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
            //            price = "0.00000000",
            //            excrate2 = "1",
            //            debitquantity = "0.00000000",
            //            debitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额 
            //            groupdebitamount = "0.00000000",
            //            globaldebitamount = "0.00000000",
            //            localdebitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额
            //            creditquantity = "0.00000000",
            //            creditamount = "0.00000000",
            //            groupcreditamount = "0.00000000",
            //            globalcreditamount = "0.00000000",
            //            localcreditamount = "0.00000000",
            //            billtype = "",
            //            bankaccount = "",
            //            checkstyle = "",
            //            checkno = "",
            //            checkdate = "",
            //            bill_id = "",
            //            bill_date = "",
            //            pk_currtype = "CNY",
            //            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 
            //            {
            //                m_pk_currtype = "CNY",
            //                money = thisYiDaData.numberField_lvua3j18.ToString(),//金额 
            //                moneymain = thisYiDaData.numberField_lvua3j18.ToString(),//金额 
            //                moneygroup = "",
            //                moneyglobal = "",
            //                pk_cashflow = "1124",//现金流编码 
            //                pk_innercorp = "",
            //            },
            //            ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//
            //                    {
            //                        new FKGL_SyncServiceModel.DataModel.ass()
            //                        {
            //                            pk_Checktype ="0019",//0019-供应商辅助核算
            //                            pk_Checkvalue = thisYiDaData.textField_lwitiobt,//供应商编码
            //                        }
            //                    },
            //        });

            //        //贷方
            //        detailList.Add(
            //            new FKGL_SyncServiceModel.DataModel.voucher_body()
            //            {
            //                detailindex = 2,
            //                accsubjcode = thisYiDaData.textField_lyodct8u,//科目编码 
            //                pk_accasoa = thisYiDaData.textField_lyodct8u,//科目编码
            //                explanation = "贷方摘要",//摘要 
            //                verifydate = 凭证日期.ToString("yyyy-MM-dd"),
            //                price = "0.00000000",
            //                excrate2 = "1",
            //                debitquantity = "0.00000000",
            //                debitamount = "0.00000000",
            //                groupdebitamount = "0.00000000",
            //                globaldebitamount = "0.00000000",
            //                localdebitamount = "0.00000000",
            //                creditquantity = "0.00000000",
            //                creditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 
            //                groupcreditamount = "0.00000000",
            //                globalcreditamount = "0.00000000",
            //                localcreditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 
            //                billtype = "",
            //                bankaccount = "",
            //                checkstyle = "",
            //                checkno = "",
            //                checkdate = "",
            //                bill_id = "",
            //                bill_date = "",
            //                pk_currtype = "CNY",
            //                cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()
            //                {
            //                },
            //                ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//辅助核算 
            //                {
            //                        new FKGL_SyncServiceModel.DataModel.ass()
            //                        {
            //                            pk_Checktype ="0011",//0011-银行账户辅助核算 
            //                            pk_Checkvalue =  thisYiDaData.textField_lrngrtgj,//银行账户 
            //                        }
            //                },
            //            }
            //        );

            //        XElement xElement = FKGL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel);
            //        xElement.Add(FKGL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据
            //        xElement.Element("voucher").Element("voucher_head").Element("details").Add(FKGL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList));
            //        //生成凭证
            //        var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=01&groupcode=0");

            //        LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证");


            //        XElement xE = XElement.Parse(results_凭证);

            //        string resultcode = xE.Element("sendresult").Element("resultcode").Value;

            //        string content = xE.Element("sendresult").Element("content")?.Value;

            //        string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
            //        var ncResData = new YiDaResDto();
            //        if (resultcode == "1")
            //        {
            //            ncResData = (new YiDaResDto()
            //            {
            //                bSuccess = true,
            //                syncTime = DateTime.Now,
            //                ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value,
            //                log = "同步成功！"
            //            });
            //        }
            //        else
            //        {
            //            ncResData = (new YiDaResDto()
            //            {
            //                bSuccess = false,
            //                syncTime = DateTime.Now,
            //                ncNo = "",
            //                log = "同步失败！原因为【" + resultdescription + "】！"
            //            });
            //        }
            //        //更新同步标识
            //        var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
            //    }
            //}
            //catch (Exception ex)
            //{

            //    throw;
            //}
        }
    }
}
