using Edu.Common.Enum.User;
using Edu.Model.Entity.User;
using Edu.Model.ViewModel.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Edu.Repository.User
{
    /// <summary>
    /// 工作流审核抄送扩展表
    /// </summary>
    public partial class Rb_Workflow_CopyToPeopleRepository : BaseRepository<Rb_Workflow_CopyToPeople>
    {
        /// <summary>
        /// 抄送我的审批（通用）
        /// </summary>
        /// <param name="searchKey">搜索关键字</param>
        /// <param name="empId">员工id</param>
        /// <param name="appAuditStatus">app获取审核状态</param>
        /// <param name="readeType">抄送我的阅读状态 0全部，1未读</param>
        /// <param name="applyType">申请筛选类型</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowCount">总条数</param>
        /// <returns></returns>
        public List<Rb_Workflow_CopyToPeople_Extend> CopyToMyAudit(string searchKey, int empId, AppAuditStatusEnum appAuditStatus, int readeType, int applyType, int pageIndex, int pageSize, out long rowCount)
        {
            string sql = $@"SELECT t.WorkFlowId,t.ReadStauts,t.TemplateType from (
        (SELECT a.*,'请假' as TemplateName,e.EmName,ask.CreateTime as AuditCreateTime,ask.`Status` from rb_workflow_copytopeople a INNER  JOIN rb_workflow_askforleave ask 
        ON a.WorkFlowId =  ask.Id and a.TemplateType = 1 and a.EmployeeId = {empId}
        INNER JOIN rb_employee e ON e.EmployeeId = ask.CreateBy)UNION
        (SELECT a.*,'出差' as TemplateName,e.EmName,ask.CreateTime as AuditCreateTime,ask.`Status` from rb_workflow_copytopeople a INNER  JOIN rb_workflow_evection ask 
        ON a.WorkFlowId =  ask.Id and a.TemplateType = 2 and a.EmployeeId = {empId}
        INNER JOIN rb_employee e ON e.EmployeeId = ask.CreateBy)UNION
        (SELECT a.*,'外出' as TemplateName,e.EmName,ask.CreateTime as AuditCreateTime,ask.`Status` from rb_workflow_copytopeople a INNER  JOIN rb_workflow_goout ask 
        ON a.WorkFlowId =  ask.Id and a.TemplateType = 3 and a.EmployeeId = {empId}
        INNER JOIN rb_employee e ON e.EmployeeId = ask.CreateBy)UNION
        (SELECT a.*,'补卡' as TemplateName,e.EmName,ask.CreateTime as AuditCreateTime,ask.`Status` from rb_workflow_copytopeople a INNER  JOIN rb_workflow_goout ask 
        ON a.WorkFlowId =  ask.Id and a.TemplateType = 4 and a.EmployeeId = {empId}
        INNER JOIN rb_employee e ON e.EmployeeId = ask.CreateBy)
        ) as t";

            StringBuilder sb = new StringBuilder();
            sb.Append($"where EmployeeId = {empId} and Stauts=2 ");

            if (!string.IsNullOrWhiteSpace(searchKey))
            {
                sb.Append($" AND (TemplateName LIKE '%{searchKey}%' or EmName LIKE '%{searchKey}%')");
            }
            else
            {
                if (readeType == 1)
                {
                    sb.Append($" AND ReadStauts=1");
                }
                if (applyType != 0)
                {
                    sb.Append($" AND TemplateType={applyType}");
                }
                if (appAuditStatus == AppAuditStatusEnum.AuditComplete)
                {
                    sb.Append($" AND (`Status`={(int)UserWFAuditStatus.Through} Or `Status`={(int)UserWFAuditStatus.NotThrough})");
                }
                else if (appAuditStatus == AppAuditStatusEnum.InComplete)
                {
                    sb.Append($" AND `Status`={(int)UserWFAuditStatus.InReview}");
                }
                else if (appAuditStatus == AppAuditStatusEnum.ToWithdraw)
                {
                    sb.Append($" AND `Status`={(int)UserWFAuditStatus.ToWithdraw}");
                }
            }
            sb.Append($" ORDER BY AuditCreateTime DESC");
            return GetPage<Rb_Workflow_CopyToPeople_Extend>(pageIndex, pageSize, out rowCount, $"{sql}  {sb.ToString()}").ToList();
        }
        /// <summary>
        /// 获取申请单下所有的抄送人信息
        /// </summary>
        /// <param name="WorkFlowId"></param>
        /// <param name="TemplateType"></param>
        /// <returns></returns>
        public List<Rb_Workflow_CopyToPeople_Extend> GetCopyToPeopleList(int WorkFlowId, int TemplateType)
        {
            string where = $@" where 1=1 and c.{nameof(Rb_Workflow_CopyToPeople.WorkFlowId)}={WorkFlowId} and c.{nameof(Rb_Workflow_CopyToPeople.TemplateType)}={TemplateType}";
            return Get<Rb_Workflow_CopyToPeople_Extend>($@" select c.*,e.EmName,e.EmPhoto,e.EmAccount,e.EmLoginMobile from Rb_Workflow_CopyToPeople c left join rb_employee e on c.EmployeeId=e.EmployeeId {where}").ToList();
        }
    }
}
