using Microsoft.AspNetCore.SignalR;
using OASystem.API.OAMethodLib.Hub.Hubs;
using OASystem.API.OAMethodLib.Quartz.Business;
using OASystem.Infrastructure.Repositories.PersonnelModule;
using Quartz;

namespace OASystem.API.OAMethodLib.Quartz.Jobs
{
    /// <summary>
    /// 任务消息推送
    /// 每天下午两点推送
    /// </summary>
    public class TaskNewsFeedJob : IJob
    {
        private readonly ILogger<TaskNewsFeedJob> _logger;
        private readonly TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();

        public TaskNewsFeedJob(ILogger<TaskNewsFeedJob> logger, TaskAllocationRepository taskAllocationRep)
        {
            _logger = logger;
            _taskAllocationRep = taskAllocationRep;
        }

        /// <summary>
        /// 任务消息推送
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Execute(IJobExecutionContext context)
        {
            //_logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"【在线人数】:"+JsonConvert.SerializeObject(ServerHub.OnlineUser));

            //在此处编写任务业务代码
            #region 消息处理

            //var data = _taskAllocationRep._sqlSugar
            //                             .Queryable<Pm_TaskAllocation>()
            //                             .Where(it => it.IsDel == 0 &&
            //                                          !string.IsNullOrEmpty(it.PredictEndTime) &&
            //                                          Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
            //                                   )
            //                             .ToList();
            //if (data.Count > 0)
            //{
            //    //处理要任务提醒的员工
            //    List<int> primaryIds = new List<int>();
            //    primaryIds = data.Select(it => it.Id).ToList();
            //    var subData = _taskAllocationRep._sqlSugar
            //                                    .Queryable<Pm_TaskRelevanceUser>()
            //                                    .Where(it => it.IsDel == 0 &&
            //                                                 primaryIds.Contains(it.TAId) &&
            //                                                 it.TaskStatus <= (int)TaskEnum.UnderWay
            //                                          )
            //                                    .ToList();

            //    _taskAllocationRep._sqlSugar.BeginTran();
            //    var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
            //    var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
            //    var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();

            //    foreach (var item in data)
            //    {
            //        string depName = string.Empty;
            //        string groupName = string.Empty;
            //        var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
            //        if (depData != null) { depName = depData.DepName; }
            //        if (item.DiId == -1) { groupName = "其他"; }
            //        else
            //        {
            //            var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
            //            if (groupData != null) { groupName = groupData.TeamName; }
            //        }

            //        var subData1 = subData.Where(it => it.TAId == item.Id).ToList();

            //        foreach (var subItem in subData1)
            //        {
            //            string realityStartTime = string.Empty;
            //            string userName = string.Empty;
            //            if (!string.IsNullOrEmpty(subItem.BeginTime))
            //            {
            //                realityStartTime = subItem.BeginTime;
            //            }
            //            else
            //            {
            //                if (subItem.TaskStatus == -1) realityStartTime = "未开始";
            //                else if (subItem.TaskStatus == 0) realityStartTime = "已知晓";
            //            }

            //            var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
            //            if (userData != null) { userName = userData.CnName; }
            //            string msgContent = string.Format(@"任务归属:{0}<br/>
            //                                                归属团组:{1}<br/>
            //                                                预计起止时间:{2} 至 {3}<br/>
            //                                                实际开始时间:{4}<br/>
            //                                                任务优先级:{5}<br/>
            //                                                任务参与者:{6}<br/>
            //                                                任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime,
            //                                                realityStartTime, item.TaskPriority, userName, item.TaskContent);
            //            Sys_Message _Message = new Sys_Message()
            //            {
            //                Type = MessgeTypeEnum.TaskProgressUpdate,
            //                Title = item.TaskName,
            //                IssuerId = 4, //管理员
            //                Content = msgContent,
            //                ReleaseTime = DateTime.Now,
            //                CreateUserId = 4,
            //                CreateTime = DateTime.Now,
            //                DeleteTime = "1990-01-01 00:00:00.000",
            //                DiId = item.DiId,
            //            };
            //            var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
            //            if (msgAddId < 0)
            //            {
            //                _taskAllocationRep._sqlSugar.RollbackTran();
            //                _logger.LogError("任务通知消息推送失败!");
            //                return;
            //            }

            //            Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
            //            {
            //                MsgId = msgAddId,
            //                ReadableUId = subItem.UserId,
            //                IsRead = 0,
            //                ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
            //                CreateUserId = 4,
            //                CreateTime = DateTime.Now,
            //                DeleteTime = "1990-01-01 00:00:00.000"
            //            };

            //            var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
            //            if (msgAuthAddId < 0)
            //            {
            //                _taskAllocationRep._sqlSugar.RollbackTran();
            //                _logger.LogError("任务通知消息推送失败!");
            //                return;
            //            }
            //        }
            //    }
            //    _taskAllocationRep._sqlSugar.CommitTran();
            //}
            #endregion

            string msg = string.Empty;
            
                //查询需要提示的消息 Singlr
                string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title,
										 sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime
										 From Sys_Message sm
										 Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId
										 Left Join Sys_Users su On sm.IssuerId = su.Id
										 Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0
										 Order By smra.ReadableUId,smra.CreateTime Desc");
                var datas = _taskAllocationRep._sqlSugar.SqlQueryable<MessageReadAuthPushView>(sql).ToList();
                msg = JsonConvert.SerializeObject(datas);

                //_hubContext.Clients.All.SendAsync("ReceiveMessage", "系统通知", $"最新消息{DateTime.Now}");
                //推送给所有连接ID的第一条数据
           
            //await _hubContext.Clients.Clients(ServerHub.OnlineUser.Select(q => q.ConnectionId).ToList()).SendAsync("SendMessageResponse", $"最新消息{DateTime.Now}");
            //return Task.CompletedTask;
        }
    }
}