using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.EduTask;
using Edu.Module.Course;
using Edu.Module.EduTask;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Edu.WebApi.Controllers.EduTask
{
    /// <summary>
    /// 改变流程相关申请
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiExceptionFilter]
    [ApiController]
    [EnableCors("AllowCors")]
    public class TempInvitationClassController : BaseController
    {
        /// <summary>
        /// 临时上课邀请处理类对象
        /// </summary>
        private readonly TempInvitationClassModule tempInvitationClassModule = AOP.AOPHelper.CreateAOPObject<TempInvitationClassModule>();

        /// <summary>
        /// 班级处理类对象
        /// </summary>
        private readonly ClassModule classModule = AOP.AOPHelper.CreateAOPObject<ClassModule>();

        ///<summary>
        /// 班级处理类对象
        /// </summary>
        private readonly EducationReceiptModule educationReceiptModule = AOP.AOPHelper.CreateAOPObject<EducationReceiptModule>();

        /// <summary>
        /// 新增修改班级调课
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetStudentTempInvitation()
        {
            var model = new RB_Student_TempInvitation_ViewModel()
            {
                Id = base.ParmJObj.GetInt("Id"),
                ClassId = base.ParmJObj.GetInt("ClassId"),
                ClassTimeIds = base.ParmJObj.GetStringValue("ClassTimeIds"),
                OrderGuestIds = base.ParmJObj.GetStringValue("OrderGuestIds"),
                Remarks = base.ParmJObj.GetStringValue("Remarks")
            };
            if (string.IsNullOrWhiteSpace(model.OrderGuestIds))
            {
                return ApiResult.Failed("请选择您要邀请的学生");
            }

            if (model.ClassId == 0)
            {
                return ApiResult.Failed("请选择您要邀请上课的班级");
            }

            if (string.IsNullOrWhiteSpace(model.ClassTimeIds))
            {
                return ApiResult.Failed("请选择您要邀请的时间");
            }
            string receiptFile = string.Empty;
            try
            {
                List<string> receiptFileList = Common.Plugin.JsonHelper.DeserializeObject<List<string>>(base.ParmJObj.GetStringValue("ReceiptFileList"));
                if (receiptFileList == null || !receiptFileList.Any())
                {
                    receiptFile = "";
                    //return ApiResult.Failed("附件必须上传");
                }
                else
                {
                    receiptFile = JsonHelper.Serialize(receiptFileList);
                }
            }
            catch (Exception ex)
            {
                Common.Plugin.LogHelper.Write(ex, "SetStudentTempInvitation");
            }
            //判断之前是否有申请过,没有才添加
            var studentTempIvvitationList = tempInvitationClassModule.GetTemporaryInvitationListRepository(new RB_Student_TempInvitation_ViewModel { ClassId = model.ClassId });
            if (studentTempIvvitationList != null && studentTempIvvitationList.Any())
            {
                var timeList = model.ClassTimeIds.Split(",");
                var orderGuestList = model.OrderGuestIds.Split(",");

                var receiptList = educationReceiptModule.GetEducationReceiptListModule(new EducationReceiptQuery()
                {
                    QRelationIds = string.Join(",", studentTempIvvitationList.Select(x => x.Id))
                });
                foreach (var item in studentTempIvvitationList)
                {
                    var receiptModel = receiptList.Where(x => x.RelationId == item.Id).FirstOrDefault();

                    var tempTimeList = item.ClassTimeIds.Split(",");
                    var tempOrderGuestList = item.OrderGuestIds.Split(",");
                    if (tempTimeList.Intersect(timeList).Count() > 0)
                    {
                        if (tempOrderGuestList.Intersect(orderGuestList).Count() > 0)
                        {
                            if (receiptModel != null && receiptModel.Id > 0 && (receiptModel.VerifyStatus == Common.Enum.EduTask.EduTaskRrocessStatus.AuditIng || receiptModel.VerifyStatus == Common.Enum.EduTask.EduTaskRrocessStatus.AuditThrough || receiptModel.VerifyStatus == Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit || receiptModel.VerifyStatus == Common.Enum.EduTask.EduTaskRrocessStatus.OtherHaveAudit))
                            {
                                return ApiResult.Failed("学员不能重复邀请");
                            }
                        }
                    }
                }
            }

            var classModel = classModule.GetClassModule(model.ClassId);
            model.CourseId = classModel.CouseId;
            model.TeacherId = classModel.Teacher_Id;
            model.School_Id = classModel.School_Id;
            if (model.Id == 0)
            {
                model.CreateBy = base.UserInfo.Id;
                model.CreateTime = DateTime.Now;
                model.Group_Id = base.UserInfo.Group_Id;
            }
            model.UpdateBy = base.UserInfo.Id;
            model.UpdateTime = DateTime.Now;
            bool flag = tempInvitationClassModule.SetStudentTempInvitationModule(model, receiptFile);
            return flag ? ApiResult.Success() : ApiResult.Failed();
        }




        //public ApiResult TestUpdateClassPlan()
        //{

        //    int id = base.ParmJObj.GetInt("Id");
        //    var result = changeClassPlanModule.UpdateChangeClassPlan(id);
        //    return ApiResult.Success("");
        //}
    }
}