using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Customer;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.Sell;
using Edu.Module.Course;
using Edu.Module.Customer;
using Edu.Module.System;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Edu.WebApi.Controllers.B2BApp
{
    /// <summary>
    /// 甲鹤同业小程序相关接口
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiExceptionFilter]
    [ApiController]
    [EnableCors("AllowCors")]
    public class B2BAppController : BaseController
    {
        /// <summary>
        /// 订单处理类对象
        /// </summary>
        private readonly OrderModule orderModule = new OrderModule();

        /// <summary>
        /// 班级处理类对象
        /// </summary>
        private readonly ClassModule classModule = new ClassModule();

        

        /// <summary>
        /// 客户返佣和幸福存折处理类对象
        /// </summary>
        private readonly CustomerBalanceDetailModule customerBalanceDetailModule = new CustomerBalanceDetailModule();

        private readonly AppHomePageModule appHomePageModule = new AppHomePageModule();


        /// <summary>
        /// 同行获取学员订单分页列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult CustomerGetStudentOrderPage()
        {
            var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            var customer = base.AppletCustomerInfo;
            var query = new RB_Order_ViewModel()
            {
                Group_Id=customer.GroupId,
                CustomerId=customer.CustomerId,
                GuestName=base.ParmJObj.GetStringValue("GuestName"),
                Q_StudentId=base.ParmJObj.GetInt("Q_StudentId"),
            };
            var list = orderModule.GetMyOrderPageList(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
            List<RB_Class_Time_ViewModel> timeList = new List<RB_Class_Time_ViewModel>();
            List<RB_Customer_BalanceDetail_ViewModel> balanceList = new List<RB_Customer_BalanceDetail_ViewModel>();
            if (list != null && list.Count > 0)
            {
                string classIds = string.Join(",", list.Select(qitem => qitem.ClassId));
                timeList= orderModule.GetClassOpenTimeListModule(classIds);
                string orderIds = string.Join(",", list.Select(qitem => qitem.OrderId));
                balanceList= customerBalanceDetailModule.GetCustomerBalanceDetailListModule(new RB_Customer_BalanceDetail_ViewModel()
                {
                    QOrderIds = orderIds
                });
            }
            List<object> result = new List<object>();
            foreach (var item in list)
            {
                var timeModel = timeList.Where(qitem => qitem.ClassId == item.ClassId)?.FirstOrDefault();
                var tempBalanceList = balanceList?.Where(qitem => qitem.OrderId == item.OrderId)?.ToList();
                var gModel = item?.GuestList?.FirstOrDefault();
                result.Add(new
                {
                    item.CourseId,
                    item.CourseName,
                    item.CourseImg,
                    item.ClassId,
                    item.ClassName,
                    item.ClassNo,
                    OpenTime= timeModel?.NewPlanDateTime??"",
                    item.ClassSchoolId,
                    item.SchoolName,
                    item.OrderState,
                    OrderStateName = item.OrderState.ToName(),
                    CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime),
                    item.GuestNum,
                    GuestList = item.GuestList.Select(qitem => new { qitem.GuestName,qitem.TotalHours,qitem.CompleteHours }),
                    item.Income,
                    item.ClassStatus,
                    ClassStatusName = item.ClassStatus.ToName(),
                    RebateMoney = tempBalanceList?.Where(qitem=>qitem.RebateType==1)?.Sum(qitem=>qitem.Money)??0,
                    DepositbookMoney = tempBalanceList?.Where(qitem => qitem.RebateType == 2)?.Sum(qitem => qitem.Money) ?? 0,
                    item.B2BBackground,
                    item.B2BIcon,
                    item.OrderId,
                    TotalHours=gModel?.TotalHours??0,
                    CompleteHours=gModel?.CompleteHours??0,
                });
            }
            pageModel.PageData = result;
            pageModel.Count = rowsCount;
            return ApiResult.Success(data: pageModel);
        }


        /// <summary>
        /// 同行获取学员上课计划
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult CustomerGetStudentPlan()
        {
            var customer = base.AppletCustomerInfo;
            int StuId = base.ParmJObj.GetInt("StuId");
            
            var obj = classModule.AppCustomerGetClassPlan(StuId);
            return ApiResult.Success(data: obj);
        }

        #region 获取客户阶段

        public Object GetPeersCustomerStageCount()
        {
            var result = appHomePageModule.GetPeersCustomerStageCount(base.AppletCustomerInfo.GroupId, base.AppletCustomerInfo.CustomerId);
            return ApiResult.Success(data: result,message:"OK");
        }

        #endregion
    }
}