using OASystem.API.OAMethodLib.ALiYun;
using OASystem.API.OAMethodLib.QiYeWeChatAPI;
using OASystem.Domain.Dtos.Business;
using OASystem.Domain.Entities.Business;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.PersonnelModule;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Infrastructure.Repositories.Groups;
using OASystem.Infrastructure.Repositories.PersonnelModule;

namespace OASystem.API.OAMethodLib.Quartz.Business
{
    public static class DeleReminderMessage
    {
        private readonly static DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>();
        private static readonly IQiYeWeChatApiService _qiYeWeChatApiService = AutofacIocManager.Instance.GetService<IQiYeWeChatApiService>();

        /// <summary>
        /// 检查团组结束日期，将当天和2天后的团组整理并发送短信提醒
        /// </summary>
        public static async void PostMessage()
        {
            DeleReminderConfig _deleReminderConfig = AutofacIocManager.Instance.GetService<DeleReminderConfig>();
            List<string> list_PhoneNumbers = _deleReminderConfig.PhoneNumber.Split(',').ToList();

            //sqladd2day查询0A2014数据库，正式使用新OA后将两次查询合并
            DateTime dtNow = DateTime.Now;
            string add2day = dtNow.AddDays(2).ToString("yyyy-MM-dd");
            string add7day = dtNow.AddDays(7).ToString("yyyy-MM-dd");

            _grpDeleRep.ChangeDataBase(DBEnum.OA2014DB);


            string sql = string.Format(@" Select * From DelegationInfo With(Nolock) Where IsDel=0 And VisitEndDate ='{0}' Or VisitStartDate='{1}' ", add2day, add7day);
            List<OA2021_DelegationInfo> list_source = _grpDeleRep._sqlSugar.SqlQueryable<OA2021_DelegationInfo>(sql).ToList();

            _grpDeleRep.ChangeDataBase(DBEnum.OA2023DB);
            if (list_source.Count > 0)
            {
                List<OA2021_DelegationInfo> listAdd7day = list_source.Where(s => s.VisitStartDate.Equals(add7day)).ToList();
                List<OA2021_DelegationInfo> listAdd2day = list_source.Where(s => s.VisitEndDate.Equals(add2day)).ToList();

                if (listAdd7day.Count > 0)
                {
                    string teamNames = "";
                    listAdd7day.ForEach(s => teamNames += s.TeamName + "、");
                    teamNames = teamNames.TrimEnd('、');
                    //发送短信
                    string add7dayZH = dtNow.AddDays(7).ToString("yyyy年MM月dd日");
                    string templateParam = JsonConvert.SerializeObject(new { teams = teamNames, date = add7dayZH });

                    foreach (string postPhoneNumber in list_PhoneNumbers)
                    {
                        string postResult = AliMessagePost.PostMessage(postPhoneNumber, "泛美国际团组", "SMS_461505530", templateParam);
                        Bus_MsgPostInfo _entity = new Bus_MsgPostInfo();
                        _entity.Source = "ALiYun";
                        _entity.TeamNames = teamNames;
                        _entity.PostType = "Dele2";
                        _entity.PhoneNumber = postPhoneNumber;
                        _entity.PostResult = postResult;
                        _grpDeleRep._sqlSugar.Insertable<Bus_MsgPostInfo>(_entity);
                    }
                }

                if (listAdd2day.Count > 0)
                {
                    string teamNames = "";
                    listAdd2day.ForEach(s => teamNames += s.TeamName + "、");
                    teamNames = teamNames.TrimEnd('、');
                    //发送短信
                    string add2dayZH = dtNow.AddDays(2).ToString("yyyy年MM月dd日");
                    string templateParam = JsonConvert.SerializeObject(new { teams = teamNames, date = add2dayZH });
                    foreach (string postPhoneNumber in list_PhoneNumbers)
                    {
                        string postResult = AliMessagePost.PostMessage(postPhoneNumber, "泛美国际团组", "SMS_461575447", templateParam);
                        Bus_MsgPostInfo _entity = new Bus_MsgPostInfo();
                        _entity.Source = "ALiYun";
                        _entity.TeamNames = teamNames;
                        _entity.PostType = "Dele1";
                        _entity.PhoneNumber = postPhoneNumber;
                        _entity.PostResult = postResult;
                        _grpDeleRep._sqlSugar.Insertable<Bus_MsgPostInfo>(_entity);
                    }
                }
            }
        }

        /// <summary>
        /// 企业微信发送消息
        /// </summary>
        public static async void PostMessageByWebhook()
        {
            DateTime dtNow = DateTime.Now;
            string add2day = dtNow.AddDays(3).ToString("yyyy-MM-dd"); //结束出访前3天
            string add7day = dtNow.AddDays(7).ToString("yyyy-MM-dd"); //开始出访前1周

            string sql = string.Format(@" Select * From Grp_DelegationInfo With(Nolock) Where IsDel=0 And VisitEndDate ='{0}' Or VisitStartDate='{1}' ", add2day, add7day);
            List<Grp_DelegationInfo> list_source = _grpDeleRep._sqlSugar.SqlQueryable<Grp_DelegationInfo>(sql).ToList();

            if (list_source.Count > 0)
            {
                List<Grp_DelegationInfo> listAdd7day = list_source.Where(s => s.VisitStartDate.Equals(add7day)).ToList();
                List<Grp_DelegationInfo> listAdd2day = list_source.Where(s => s.VisitEndDate.Equals(add2day)).ToList();
                string dayStr = dtNow.ToString("yyyy年MM月dd日");
                string content = string.Format(@" 今天是{0},\n ", dayStr);

                if (listAdd7day.Count > 0)
                {
                    string tempStr1 = string.Format(@" \n\n检查到7天后开始的团组数量: <font color='warning'>** {1} **</font>\n ", dayStr, listAdd7day.Count);
                    listAdd7day.ForEach(s => tempStr1 += string.Format(@">{0} \n", s.TeamName));
                    content += tempStr1;
                }

                if (listAdd2day.Count > 0)
                {
                    string tempStr2 = string.Format(@" \n\n检查到3天后结束的团组数量: <font color='info'>** {1} **</font>\n ", dayStr, listAdd2day.Count);
                    listAdd7day.ForEach(s => tempStr2 += string.Format(@">{0} \n", s.TeamName));
                    content += tempStr2;
                }

                content += string.Format(@"\n\n请注检查合同、款项等信息");


                OASystem.Domain.ViewModels.QiYeWeChat.ResponseBase result = await _qiYeWeChatApiService.RobotSendMsg_GroupInfo(content);
            }
        }
    }
}
