using Edu.Common.Enum.Course;
using Edu.Model.Entity.Course;
using Edu.Model.Entity.EduTask;
using Edu.Model.Entity.Sell;
using Edu.Model.ViewModel.EduTask;
using Edu.Model.ViewModel.Sell;
using Edu.Repository.Course;
using Edu.Repository.EduTask;
using Edu.Repository.Sell;
using System.Collections.Generic;
using System.Linq;
using VT.FW.AOP.CustomerAttribute;
using VT.FW.DB;

namespace Edu.Module.EduTask
{
    /// <summary>
    /// 调课计划处理类
    /// </summary>
    public class StopStudentClassModule
    {
        /// <summary>
        /// 教务单据仓储层对象
        /// </summary>
        private readonly RB_Education_ReceiptRepository education_ReceiptRepository = new RB_Education_ReceiptRepository();

        /// <summary>
        /// 停课计划仓储层对象
        /// </summary>
        private readonly RB_Student_StopClassRepository student_StopClassRepository = new RB_Student_StopClassRepository();

        /// <summary>
        /// 订单学员仓储层对象
        /// </summary>
        private readonly RB_Order_GuestRepository order_GuestRepository = new RB_Order_GuestRepository();

        /// <summary>
        /// 获取调课计划列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_StopClass_ViewModel> GetStudentStopClassListRepository(RB_Student_StopClass_ViewModel query)
        {
            return student_StopClassRepository.GetStudentStopClassListRepository(query);
        }


        /// <summary>
        /// 定时处理停课申请生效日期以及学员的上课状态
        /// </summary>
        /// <returns></returns>
        public bool UpdateAuditThroughStudent()
        {
            var list = order_GuestRepository.GetOrderStopClassing(new RB_Order_Guest_ViewModel { GuestState = Common.Enum.Course.GuestStateEnum.StopClassesApplyIng });
            foreach (var item in list.Where(x => x.StopClassEffectTime.HasValue && x.StopClassEffectTime < System.DateTime.Now))
            {
                //将学员的学习状态变成停课申
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Order_Guest.GuestState),(int)GuestStateEnum.StopClasses},
                    {nameof(RB_Order_Guest.ChangeEffectTime),item.StopClassEffectTime},
                    {nameof(RB_Order_Guest.UpdateTime),System.DateTime.Now},
                };
                order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest.Id), item.Id));
            }
            return true;
        }


        /// <summary>
        /// 新增修改停课申请
        /// </summary>
        /// <returns></returns>
        [TransactionCallHandler]
        public virtual bool SetStudentStopClassModule(RB_Student_StopClass_ViewModel extModel,string receiptFile)
        {
            bool flag = false;
            if (extModel.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_StopClass_ViewModel.OrderGuestId),extModel.OrderGuestId },
                    {nameof(RB_Student_StopClass_ViewModel.ClassId),extModel.ClassId },
                    {nameof(RB_Student_StopClass_ViewModel.CourseId),extModel.CourseId },
                    {nameof(RB_Student_StopClass_ViewModel.TakeEffectTime),extModel.TakeEffectTime },
                    {nameof(RB_Student_StopClass_ViewModel.UpdateBy),extModel.UpdateBy },
                    {nameof(RB_Student_StopClass_ViewModel.UpdateTime),extModel.UpdateTime },
                };
                flag = student_StopClassRepository.Update(fileds, new WhereHelper(nameof(RB_Student_StopClass_ViewModel.Id), extModel.Id));
            }
            else
            {
                var newId = student_StopClassRepository.Insert(extModel);
                extModel.Id = newId;
                flag = newId > 0;
                if (flag)
                {
                    //将学员的学习状态变成停课申请中
                    Dictionary<string, object> fileds = new Dictionary<string, object>()
                    {
                        {nameof(RB_Order_Guest.GuestState),(int)GuestStateEnum.StopClassesApplyIng},
                    };
                    flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest.Id), extModel.OrderGuestId));
                    var educationReceipt = new RB_Education_Receipt()
                    {
                        Id = 0,
                        Title = "停课申请",
                        ReceiptType = Common.Enum.Finance.ReceiptTypeEnum.StopClass,
                        RelationId = newId,
                        ClassId = extModel.ClassId,
                        Group_Id = extModel.Group_Id,
                        School_Id = extModel.School_Id,
                        CreateBy = extModel.CreateBy,
                        CreateTime = extModel.CreateTime,
                        UpdateBy = extModel.UpdateBy,
                        UpdateTime = extModel.UpdateTime,
                        VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit,
                        ReceiptFile= receiptFile
                    };
                    flag = education_ReceiptRepository.SetEducationReceiptRepository(educationReceipt, out string message);
                }
            }
            return flag;
        }




    }
}