using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Data;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MySystem.Models;
using System.Threading;
using Library;
using LitJson;

namespace MySystem.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Error()
        {
            string isapi = Request.Headers["Api"].ToString();
            if (isapi != "1")
            {
                if (Response.StatusCode == 500)
                {
                    return Redirect("/public/errpage/pc/500.html");
                }
                else if (Response.StatusCode == 502)
                {
                    return Redirect("/public/errpage/pc/502.html");
                }
                else if (Response.StatusCode == 404)
                {
                    return Redirect("/public/errpage/pc/404.html");
                }
            }
            return View();
        }

        public string test(int id = 0)
        {
            string txt = "ok";
            // txt = WeChatFunction.Instance.QueryProfitShare("1646405429","4200001807202306098649105270","2023060910241258564572510");
            // ProfitHelper.Instance.ReturnStat(Id, 2);
            WebCMSEntities db = new WebCMSEntities();
            List<int> oids = new List<int>();
            if(id > 0)
            {
                oids.Add(id);
            }
            else
            {
                oids.Add(15);
                oids.Add(16);
                oids.Add(17);
                oids.Add(18);
                oids.Add(19);
                oids.Add(20);
            }
            foreach(int oid in oids)
            {
                ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == oid);
                if(order != null)
                {
                    RedisDbconn.Instance.AddList("ConsumerOrders:Divi:2:List", order.Id.ToString());
                    // RedisDbconn.Instance.AddList("ConsumerOrders:Divi:2:" + order.MerchantId, order);
                }
            }
            db.Dispose();
            return txt;
        }

        public string testAlipay()
        {
            // string content = AlipayFunction.Instance.QuerySignStatus("2023061317351531100060045");
            // List<RoyaltyParameters> Parameters = new List<RoyaltyParameters>();
            // Parameters.Add(new RoyaltyParameters()
            // {
            //     Account = "2088141704579033",
            //     Amount = "0.01",
            // });
            // string content = AlipayFunction.Instance.Settle("2023061615441556447868073", "2023061622001451251436120885", Parameters);
            // string content = AlipayFunction.Instance.BindSettleRelation(DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), "2088141704579033");
            // string content = AlipayFunction.Instance.Refund("2023061622001451251436120885", "0.01", "门店分红");
            // string content = AlipayFunction.Instance.QuerySettle("2023071214274372011988068", "2023071222001457121457238496", "202307BB6d61386d17104395831e3ea6309f0X57");
            // MerchantConfirmService.Instance.StartDo(68, 2);
            // string content = AlipayFunction.Instance.BindSettleRelation(DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), AlipayFunction.Instance.Pid, "202307BB6d61386d17104395831e3ea6309f0X57");

            List<string> ordernos = new List<string>();
            ordernos.Add("2023100319505443423678128");
            WebCMSEntities db = new WebCMSEntities();
            List<ConsumerOrders> orders = db.ConsumerOrders.Where(m => ordernos.Contains(m.OrderNo)).OrderBy(m => m.Id).ToList();
            foreach(ConsumerOrders order in orders)
            {
                MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantInfo();
                MerchantParamSet set = db.MerchantParamSet.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantParamSet();
                if(order.IsAct == 1 && order.PayMoney >= set.MinPayMoney)
                {
                    MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantAddInfo();
                    // //添加分账接收方
                    // if(merchantAdd.Sort == 0)
                    // {
                    //     string content = AlipayFunction.Instance.BindSettleRelation(DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), AlipayFunction.Instance.Pid, merchantAdd.AlipayAuthToken);
                    //     LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + content, "支付宝添加分账方");
                    //     merchantAdd.Sort = 1;
                    //     db.SaveChanges();
                    // }
                    // //发起分账
                    // decimal fee = order.PayMoney * 0.01M;
                    // if(fee >= 0.01M)
                    // {
                    //     string TradeNo = order.SeoTitle;
                    //     string OrderNo = order.OrderNo;
                    //     List<RoyaltyParameters> Parameters = new List<RoyaltyParameters>();
                    //     Parameters.Add(new RoyaltyParameters()
                    //     {
                    //         Account = AlipayFunction.Instance.Pid,
                    //         Amount = fee.ToString("f2"),
                    //     });
                    //     AlipayFunction.Instance.Settle(OrderNo, TradeNo, Parameters, merchantAdd.AlipayAuthToken);

                    //     //开始监听分账状态
                    //     Dictionary<string, object> req = new Dictionary<string, object>();
                    //     req.Add("TradeNo", TradeNo); //支付宝订单号
                    //     req.Add("OrderNo", OrderNo); //商户订单号
                    //     req.Add("AuthToken", merchantAdd.AlipayAuthToken);
                    //     RedisDbconn.Instance.AddList("AlipayShareQueue", Newtonsoft.Json.JsonConvert.SerializeObject(req));
                    // }

                    //添加分账接收方
                    if(merchant.Version == 0)
                    {
                        WeChatFunction.Instance.AddReceive(merchantAdd.SubMchid, "MERCHANT_ID", WeChatFunction.Instance.MchId, WeChatFunction.Instance.MchName, "PARTNER");
                        merchant.Version = 1;
                        db.SaveChanges();
                    }
                    //发起分账
                    decimal fee = order.PayMoney; //单位：分
                    if(fee >= 1)
                    {
                        string TradeNo = order.SeoTitle;
                        string OrderNo = order.OrderNo;
                        List<ReceiverList> Receivers = new List<ReceiverList>();
                        Receivers.Add(new ReceiverList()
                        {
                            type = "MERCHANT_ID",  //分账接收方类型
                            account = WeChatFunction.Instance.MchId,  //分账接收方账号
                            amount = int.Parse(fee.ToString("f0")),  //分账金额
                            description = "服务费",  //分账描述
                        });
                        WeChatFunction.Instance.ProfitShare(merchantAdd.SubMchid, TradeNo, OrderNo, Receivers);

                        //开始监听分账状态
                        Dictionary<string, object> req = new Dictionary<string, object>();
                        req.Add("SubMchid", merchantAdd.SubMchid); //子商户号
                        req.Add("TradeNo", TradeNo); //微信订单号
                        req.Add("OrderNo", OrderNo); //商户订单号
                        RedisDbconn.Instance.AddList("ProfitShareQueue", Newtonsoft.Json.JsonConvert.SerializeObject(req));
                    }
                }
            }
            db.Dispose();
            return "ok";
        }

        public string test1()
        {            
            // ProfitHelper.Instance.DoProfit();
            List<string> list = new List<string>();
            list.Add("LKB01230900199998516");
            WebCMSEntities db = new WebCMSEntities();
            foreach(string sub in list)
            {
                bool op = db.PosMachinesTwo.Any(m => m.PosSn == sub);
                if(!op)
                {
                    //insert into PosMachinesTwo (CreateDate,SourceStoreId,StoreId,PosSn,SourcePosSn) values (now(),2,2,'
                    db.PosMachinesTwo.Add(new PosMachinesTwo()
                    {
                        CreateDate = DateTime.Now,
                        SourceStoreId = 2,
                        StoreId = 2,
                        PosSn = sub,
                        SourcePosSn = sub,
                    });
                    db.SaveChanges();
                }
            }
            db.Dispose();
            return "ok";
        }
    
    }
}