using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text.RegularExpressions;
using MySystem.Models;
using Library;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using LitJson;
/// <summary>
/// 设置机具服务费
/// </summary>

namespace MySystem
{
    public class PublicChangePosFee
    {
        public static WebCMSEntities db = new WebCMSEntities();

        #region 金控-设置押金
        public static string SetJKDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "299";
            string check = RedisDbconn.Instance.Get<string>("SetJKPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetJKPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetJKPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "金控-设置押金-返回报文");
                string content = function.GetWebRequest("http://sp.kexiaoshuang.com/api/test/SetDeposit?sn=" + pos.PosSn + "&num=" + DepositId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "金控-设置押金-返回报文");
                if (content == "fail")
                {
                    return "机具" + pos.PosSn + "设置失败";
                }
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() != "000000")
                {
                    return jsonObj["message"].ToString();
                }
                content = jsonObj["data"].ToString();
                content = PublicImportDataService.Instance.Decrypt(content);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "金控-设置押金-返回报文");
                JsonData contentObj = JsonMapper.ToObject(content);
                if (contentObj["respCode"].ToString() != "00")
                {
                    return contentObj["respMsg"].ToString();
                }
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                decimal amount = decimal.Parse(DepositId);
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion




        #region 开店宝-设置押金
        public static string SetKDBDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "473";
            string check = RedisDbconn.Instance.Get<string>("SetKDBPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetKDBPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetKDBPosDepositWait:" + SnIds, 10);
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "开店宝-设置押金-返回报文");
                string content = PublicImportDataService.Instance.ModifyDeposit(pos.PosSn, DepositId);
                if (content == "fail")
                {
                    return "机具" + pos.PosSn + "设置失败";
                }
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "开店宝-设置押金-返回报文");

                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                decimal amount = decimal.Parse(PublicImportDataService.Instance.GetDepositAmount(DepositId));
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion



        #region 乐刷-设置押金
        public static string SetLSDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "300";
            string check = RedisDbconn.Instance.Get<string>("SetLSPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetLSPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetLSPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                string OldId = "", NewId = "";
                if (DepositId == "100")
                {
                    NewId = "704067039039856640";
                }
                else if (DepositId == "200")
                {
                    NewId = "709820183485095936";
                }
                else if (DepositId == "300")
                {
                    NewId = "709820390742437888";
                }
                string content = PublicImportDataService.Instance.QueryActiveForConfig(pos.PosSn, pos.BrandId);
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() == "0")
                {
                    OldId = jsonObj["data"]["posMarket"]["id"].ToString();
                }
                jsonObj = JsonMapper.ToObject(content);
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + OldId + ":" + NewId, "乐刷-设置押金-返回报文");
                content = PublicImportDataService.Instance.SetDepositForLS(pos.PosSn, OldId, NewId, pos.BrandId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "乐刷-设置押金-返回报文");
                if (content == "fail")
                {
                    return "机具" + pos.PosSn + "设置失败";
                }
                jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() != "0")
                {
                    return jsonObj["msg"].ToString();
                }
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "乐刷-设置押金-返回报文");
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                decimal amount = decimal.Parse(DepositId);
                if (pos.BrandId == 4 || pos.BrandId == 5)
                {
                    amount -= 1;
                }
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion



        #region 立刷-设置押金
        public static string SetLISDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "249";
            string check = RedisDbconn.Instance.Get<string>("SetLISPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetLISPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetLISPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "立刷-设置押金-返回报文");
                string content = PublicImportDataService.Instance.SetLiSDeposit(pos.PosSn, int.Parse(DepositId));
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "立刷-设置押金-返回报文");
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["ret_code"].ToString() != "00")
                {
                    return jsonObj["ret_msg"].ToString();
                }
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "立刷-设置押金-返回报文");
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    if (RelationClass.GetKqProductBrandInfo(pos.BrandId) == "立刷云电签")
                    {
                        BeforeDeposit = 249;
                    }
                    else
                    {
                        BeforeDeposit = 299;
                    }
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                pos.PrizeParams = DepositId;
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion



        #region 盛付通-设置押金
        public static string SetSFTDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "2024POS299";
            string check = RedisDbconn.Instance.Get<string>("SetSFTPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetSFTPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetSFTPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "盛付通-设置押金-返回报文");
                string content = PublicImportDataService.Instance.SetDepositForSft(pos.PosSn, DepositId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "盛付通-设置押金-返回报文");
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["respCode"].ToString() != "00")
                {
                    return jsonObj["errorMsg"].ToString();
                }
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                pos.PrizeParams = DepositId.Replace("2024POS", "");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion




        #region 海科-设置押金
        public static string SetHKDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "300";
            string check = RedisDbconn.Instance.Get<string>("SetHKPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetHKPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetHkPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                string OldId = "", NewId = "";
                if (DepositId == "100")
                {
                    NewId = pos.BrandId == 8 ? "202207011718129" : "202207011718197";
                }
                else if (DepositId == "200")
                {
                    NewId = pos.BrandId == 8 ? "747200504467566592" : "747199934126108672";
                }
                else if (DepositId == "300")
                {
                    NewId = pos.BrandId == 8 ? "747193472108732416" : "747193820156276736";
                }
                string content = PublicImportDataService.Instance.QueryActiveForConfigHK(pos.PosSn, pos.BrandId);
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() == "0")
                {
                    OldId = jsonObj["data"]["posMarket"]["id"].ToString();
                }
                jsonObj = JsonMapper.ToObject(content);
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + OldId + ":" + NewId, "海科-设置押金-返回报文");
                content = PublicImportDataService.Instance.SetDepositForHK(pos.PosSn, OldId, NewId, pos.BrandId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "海科-设置押金-返回报文");
                if (content == "fail")
                {
                    return "机具" + pos.PosSn + "设置失败";
                }
                jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() != "0")
                {
                    return jsonObj["msg"].ToString();
                }
                decimal amount = decimal.Parse(DepositId);
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                if (pos.BrandId == 8 || pos.BrandId == 9)
                {
                    amount -= 1;
                }
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);

            }
            return "设置成功";
        }
        #endregion



        #region 联动-设置押金
        public static string SetLDDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "299";
            string check = RedisDbconn.Instance.Get<string>("SetLDPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetLDPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetLDPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "联动-设置押金-返回报文");
                string content = PublicImportDataService.Instance.LDServiceFee(pos.PosSn, int.Parse(DepositId), pos.BrandId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "联动-设置押金-返回报文");
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["code"].ToString() != "000000")
                {
                    return jsonObj["msg"].ToString();
                }
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                decimal amount = decimal.Parse(DepositId);
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion



        #region 盒易付-设置押金
        public static string SetHYFDeposit(string SnIds,string DepositId)
        {
            // string DepositId = "299";
            string check = RedisDbconn.Instance.Get<string>("SetHYFPosDepositWait:" + SnIds);
            if (!string.IsNullOrEmpty(check))
            {
                return "操作频繁，请稍后再试";
            }
            RedisDbconn.Instance.Set("SetHYFPosDepositWait:" + SnIds, SnIds);
            RedisDbconn.Instance.SetExpire("SetHYFPosDepositWait:" + SnIds, 10);
            Dictionary<string, object> Obj = new Dictionary<string, object>();
            string[] SnIdList = SnIds.Split(',');
            foreach (string SnId in SnIdList)
            {
                int SnIdNum = int.Parse(SnId);
                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnIdNum && m.BindingState == 0 && (string.IsNullOrEmpty(m.SeoKeyword) || m.SeoKeyword == "0"));
                if (pos == null)
                {
                    return "机具" + pos.PosSn + "已设置押金，请勿重复设置";
                }
                function.WriteLog(DateTime.Now.ToString() + ":请求参数，" + pos.PosSn + ":" + DepositId, "盒易付-设置押金-返回报文");
                string content = PublicImportDataService.Instance.BoxServiceFee(pos.PosSn, DepositId);
                function.WriteLog(DateTime.Now.ToString() + "\n" + content, "盒易付-设置押金-返回报文");
                if (content == "fail")
                {
                    return "机具" + pos.PosSn + "设置失败";
                }
                JsonData jsonObj = JsonMapper.ToObject(content);
                if (jsonObj["resultCode"].ToString() != "1")
                {
                    return jsonObj["errorDesc"].ToString();
                }
                var BeforeDeposit = 0;
                if (string.IsNullOrEmpty(pos.PrizeParams))
                {
                    BeforeDeposit = 299;
                }
                else
                {
                    BeforeDeposit = int.Parse(pos.PrizeParams);
                }
                decimal amount = decimal.Parse(DepositId);
                pos.PrizeParams = amount.ToString("f0");
                db.SaveChanges();

                //设置押金添加记录
                PublicFunction.MerchantDepositSet(pos.BrandId, 0, SnIdNum, pos.PosSn, BeforeDeposit, decimal.Parse(pos.PrizeParams), content);
            }
            return "设置成功";
        }
        #endregion
    }
}
