using System;
using System.Collections.Generic;
using Library;
using LitJson;
using System.Linq;
using System.Data;
using System.Threading;
using MySystem.Models;

namespace MySystem
{
    public class LeaderPrizeService
    {
        public readonly static LeaderPrizeService Instance = new LeaderPrizeService();
        private LeaderPrizeService()
        { }

        public void Start()
        {
            Thread th = new Thread(dosomething);
            th.IsBackground = true;
            th.Start();
        }

        public void dosomething()
        {
            while (true)
            {
                string data = RedisDbconn.Instance.RPop<string>("LeaderPrizeQueue");
                if (!string.IsNullOrEmpty(data))
                {
                    try
                    {
                        int PosId = int.Parse(function.CheckInt(data));
                        WebCMSEntities db = new WebCMSEntities();
                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId);
                        if (pos != null)
                        {
                            int LeaderUserId = pos.LeaderUserId;
                            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == LeaderUserId);
                            if (account == null)
                            {
                                account = db.UserAccount.Add(new UserAccount()
                                {
                                    Id = LeaderUserId,
                                    UserId = LeaderUserId,
                                }).Entity;
                                db.SaveChanges();
                            }
                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
                            account.BalanceAmount += 10;
                            account.TotalAmount += 10;
                            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
                            decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
                            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
                            UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
                            {
                                CreateDate = DateTime.Now,
                                UpdateDate = DateTime.Now,
                                UserId = LeaderUserId, //创客
                                ChangeType = 116, //变动类型
                                ChangeAmount = 10, //变更金额
                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
                                QueryCount = PosId,
                            }).Entity;
                            db.SaveChanges();
                        }
                        db.Dispose();
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "大盟主奖励异常");
                    }
                    Thread.Sleep(100);
                }
                else
                {
                    Thread.Sleep(60000);
                }
            }
        }
    }
}