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 StopStudentClassController : BaseController
    {
        /// <summary>
        /// 调课处理类对象
        /// </summary>
        private readonly StopStudentClassModule stopStudentClassModule = AOP.AOPHelper.CreateAOPObject<StopStudentClassModule>();

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

        /// <summary>
        /// Vip课程申请处理类
        /// </summary>
        private readonly CourseVipModule courseVipModule = AOP.AOPHelper.CreateAOPObject<CourseVipModule>();

        /// <summary>
        /// 新增修改班级调课
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetStudentStopClass()
        {
            var model = new RB_Student_StopClass_ViewModel()
            {
                Id = base.ParmJObj.GetInt("Id"),
                ClassId = base.ParmJObj.GetInt("ClassId"),
                CourseId = base.ParmJObj.GetInt("CourseId"),
                OrderGuestId = base.ParmJObj.GetInt("OrderGuestId"),
                Remarks = base.ParmJObj.GetStringValue("Remarks"),
                OldStudentStatus = base.ParmJObj.GetInt("OldStudentStatus")
            };
            var classModel = classModule.GetClassModule(model.ClassId);
            string receiptFile = string.Empty;
            try
            {
                string takeEffectTime = base.ParmJObj.GetStringValue("TakeEffectTime");
                if (string.IsNullOrWhiteSpace(takeEffectTime))
                {
                    return ApiResult.Failed("请选择生效日期");
                }
                model.TakeEffectTime = Convert.ToDateTime(takeEffectTime);
                List<string> receiptFileList = Common.Plugin.JsonHelper.DeserializeObject<List<string>>(base.ParmJObj.GetStringValue("ReceiptFileList"));
                if (receiptFileList == null || !receiptFileList.Any())
                {
                    return ApiResult.Failed("附件必须上传");
                }
                else
                {
                    receiptFile = JsonHelper.Serialize(receiptFileList);
                }
            }
            catch (Exception ex)
            {
                Common.Plugin.LogHelper.Write(ex, "SetStudentStopClass");
            }

            if (model.Id == 0)
            {
                model.CreateBy = base.UserInfo.Id;
                model.CreateTime = DateTime.Now;
                model.Group_Id = base.UserInfo.Group_Id;
                model.School_Id = classModel.School_Id;
            }
            model.UpdateBy = base.UserInfo.Id;
            model.UpdateTime = DateTime.Now;
            model.IsAuditThrough = 0;
            bool flag = stopStudentClassModule.SetStudentStopClassModule(model, receiptFile);
            return flag ? ApiResult.Success() : ApiResult.Failed();
        }

        /// <summary>
        /// 新增修改Vip课程申请
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetVipCourseApply()
        {
            var model = new RB_Course_Vip_Extend()
            {
                Id = base.ParmJObj.GetInt("Id"),
                CateId = base.ParmJObj.GetInt("CateId"),
                CourseName = base.ParmJObj.GetStringValue("CourseName"),
                HourType=base.ParmJObj.GetInt("HourType"),
                TotalHour = base.ParmJObj.GetDecimal("TotalHour"),
                CourseTimeId = base.ParmJObj.GetInt("CourseTimeId"),
                CoursePrice = base.ParmJObj.GetDecimal("CoursePrice"),
                Remarks=base.ParmJObj.GetStringValue("Remarks"),
                StuId=base.ParmJObj.GetInt("StuId"),
            };
            model.Group_Id = base.UserInfo.Group_Id;
            model.School_Id = base.UserInfo.School_Id;
            model.CreateBy = base.UserInfo.Id;
            model.CreateTime = DateTime.Now;
            model.UpdateBy = base.UserInfo.Id;
            model.UpdateTime = DateTime.Now;
            model.AuditStatus = Common.Enum.User.WFRrocessStatus.NotAudit;
            int times = courseVipModule.CalcChapterTimesModule(model.CourseTimeId, model.HourType, model.TotalHour, out _, out _, out string message1);
            if (!string.IsNullOrEmpty(message1))
            {
                return ApiResult.Failed(message: message1);
            }
            bool flag = courseVipModule.SetCourseVipModule(model, out string message);
            return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
        }
    }
}