using JLHHJSvr.Com.Model;
using LJLib.Tools.File;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;
using JLHHJSvr.Com;
using JLHHJSvr.LJFramework.Tools;
using LJLib.DAL.SQL;
using Newtonsoft.Json.Linq;
using DirectService.Tools;
using LJLib.Tools.DEncrypt;

namespace JLHHJSvr
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("请输入内容");
                return;
            }

            try
            {
                XmlConfig xmlconfig = new XmlConfig();
                string connectionString = xmlconfig.GetXmlFileValue(GlobalVar.XmlFile, string.Empty, "ConnectionString", string.Empty);
                connectionString = DESEncrypt.Decrypt(connectionString, "4A61A8B51C3E42BCAE991F6C913A6A33");

                using (var con = new SqlConnection(connectionString))
                using (var cmd = con.CreateCommand())
                {
                    con.Open();

                    var url = textBox4.Text;

                    var loginReq = new LoginRequest()
                    {
                        usercode = textBox2.Text,
                        psw = textBox3.Text,
                    };
                    var loginRsp = LJHttpUtil.PostRequest(url + loginReq.GetApiName(), JObject.FromObject(loginReq))
                        .ToObject<LoginResponse>();

                    if (!string.IsNullOrEmpty(loginRsp.ErrMsg))
                    {
                        MessageBox.Show("登录失败：" + loginRsp.ErrMsg);
                        return;
                    }

                    var token = loginRsp.token;

                    var list = new List<u_mattress>();
                    var textStr = textBox1.Text.Replace("，", ",").Split(',');
                    var whereStr = $"mattresscode IN {ListEx.getString(textStr)}";
                    DbSqlHelper.Select(cmd, list, whereStr, "mattressid,deptid,mattresstypeid,mattress_width,mattress_length,mattress_height,packtype,packqty,woodpallettype,total_hr_cost,total_material_cost,fees_dscrp,total_fees_cost,total_cost,taxrate,taxes,commissionrate,commission,fob,profitrate,createtime,createby,extras_cost,dept_profitrate,moneyrate,nottax_factory_cost,nottax_dept_cost,dept_cost,foreign_cost,mattresscode,mattressname,diameter,area,cabinet_type,loading_type,hrcost,biandaicost,fob_replace_formula,hrcost_replace_formula,biandaicost_replace_formula,mattressrelcode,other_rate,gydscrp,flag,dept_profitrate_rangli,auditingrep,auditingdate,profitrate_point,if_moneyrate,discount,if_discount,erp_mtrlid,erp_configcodetype,erp_mtrlcode,erp_mtrlname,erp_mtrlmode,erp_mtrltypeid,erp_mtrltype,erp_mtrlunit,erp_mtrlengname,erp_piccode,yw_flag,yw_auditingrep,yw_auditingdate,js1_flag,js1_auditingrep,js1_auditingdate,js2_flag,js2_auditingrep,js2_auditingdate,creatmtrl_flag,creatmtrl_auditingrep,creatmtrl_auditingdate,creatmtrlqd_flag,creatmtrlqd_auditingrep,creatmtrlqd_auditingdate,if_m_chai,if_z_chai,if_d_chai,if_n_butao,if_w_butao,if_m_wbutao_way,if_db_wbutao_way,s_cover_qty,z_cover_qty,x_cover_qty,biandai_qty,s_m_cover_qty,z_m_cover_qty,x_m_cover_qty,butao_point,chaizhuang_point,if_haimian_type,haimian_point,if_zhedie_type,old_mtrlname,xd_flag,xd_auditingrep,xd_auditingdate,qr_flag,qr_auditingrep,qr_auditingdate,temp_code,erp_cb_updatetime,bcptypeid,if_bcp_type,bcp_m_id,bcp_m_name,bcp_d_id,bcp_d_name,bcp_dc_id,bcp_dc_name,bcp_xc_id,bcp_xc_name,bcp_vc_id,bcp_vc_name,bcp_cw_id,bcp_cw_name,zhizao_amt,guanli_rate,dannum_rate,cubage,foreign_cost_bz,foreign_cost_dd");

                    var idList = textStr.Select(x => x.Trim());
                    var failIDs = new HashSet<string>(idList);
                    var okIDs = new HashSet<string>();

                    var errMsg = string.Empty;
                    foreach (var mattress in list)
                    {
                        var id = mattress.mattressid;
                        var old_mattresscode = mattress.mattresscode;
                        mattress.dannum_type = 0;
                        try
                        {
                            mattress.mattressid = 0;
                            mattress.mattresscode = "";
                            var mxList = new List<u_mattress_mx_mtrl>();
                            whereStr = $"mattressid = {id}";
                            DbSqlHelper.Select(cmd, mxList, whereStr, "mattressmxid,formulaid,formula,mtrlid,price,gram_weight,cloth_width,if_inputqty,qty,costamt,if_15strip,if_success,shrinkage,replace_formula,priceunit,if_areaprice,thickness,chastr,dv_dscrp,xu,useqty,useformula,replace_useformula,gydscrp,cw_erpmtrlcode,erp_mtrlid");

                            var saveReq = new SaveMattressRequest()
                            {
                                mattress = mattress,
                                mattressMx = mxList,
                                token = token,
                            };

                            var saveRsp = LJHttpUtil.PostRequest(url + saveReq.GetApiName(), JObject.FromObject(saveReq))
                                .ToObject<SaveMattressResponse>();
                            if (!string.IsNullOrEmpty(saveRsp.ErrMsg))
                            {
                                errMsg += $"{old_mattresscode}:ERRMSG==> {saveRsp.ErrMsg}\r\n";
                            }
                            else
                            {
                                okIDs.Add(mattress.mattresscode);
                                failIDs.Remove(mattress.mattresscode);
                            }
                        }
                        catch (Exception ex)
                        {
                            errMsg += $"{id}: {ex}\r\n";
                        }
                    }

                    textBox1.Text = $"同步失败：{string.Join(",", failIDs)}\r\n同步成功：{string.Join(",", okIDs)}\r\n{errMsg}";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}
