using Edu.Common.Enum;
using Edu.Common.Enum.User;
using Edu.Model.ViewModel.User;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;

namespace Edu.Repository.User
{
    /// <summary>
    /// 讲师仓储层
    /// </summary>
    public class RB_TeacherRepository : BaseRepository<Model.Entity.User.RB_Teacher>
    {
        /// <summary>
        /// 获取讲师列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetTeacherListRepository(RB_Teacher_ViewModel query)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat(@"
SELECT t.*,g.GroupName,s.SName 
FROM rb_teacher AS t LEFT JOIN rb_group AS g ON t.Group_Id=g.GId
     LEFT JOIN rb_school AS s ON t.School_Id=s.SId
WHERE 1=1 
");
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Status), (int)DateStateEnum.Normal);
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.AuditStatus), (int)AccountStatusEnum.Pass);
            if (query != null)
            {
                if (query.Group_Id > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Group_Id), query.Group_Id);
                }
                //if (query.School_Id > 0)
                //{
                //    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.School_Id), query.School_Id);
                //}
                if (!string.IsNullOrWhiteSpace(query.TeacherName))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherName ", nameof(RB_Teacher_ViewModel.TeacherName));
                    parameters.Add("TeacherName", "%" + query.TeacherName.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherTel))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherTel ", nameof(RB_Teacher_ViewModel.TeacherTel));
                    parameters.Add("TeacherTel", "%" + query.TeacherTel.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherSay))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherSay ", nameof(RB_Teacher_ViewModel.TeacherSay));
                    parameters.Add("TeacherSay", "%" + query.TeacherSay.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherIntro))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherIntro ", nameof(RB_Teacher_ViewModel.TeacherIntro));
                    parameters.Add("TeacherIntro", "%" + query.TeacherIntro.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeachTag))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeachTag ", nameof(RB_Teacher_ViewModel.TeachTag));
                    parameters.Add("TeachTag", "%" + query.TeachTag.Trim() + "%");
                }
                if (query.TId > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.TId), query.TId);
                }
                if (!string.IsNullOrEmpty(query.QTIds))
                {
                    builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.TId), query.QTIds);
                }
                if (!string.IsNullOrEmpty(query.NotQueryTIds))
                {
                    builder.AppendFormat(" AND t.{0} NOT IN({1}) ", nameof(RB_Teacher_ViewModel.TId), query.NotQueryTIds);
                }
                //在职老师
                if (query.IsQLeave == 0)
                {
                    builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.LeaveStatus), "1,2,3");
                }
                else
                {
                    builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.LeaveStatus), "1,2,3,4");
                }
                if (query.IsShow > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.IsShow), query.IsShow);
                }
                if (query.Dept_Id > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Dept_Id), query.Dept_Id);
                }
            }
            return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
        }


        /// <summary>
        /// 获取讲师分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetTeacherPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Teacher_ViewModel query)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat(@"
SELECT t.*,g.GroupName,s.SName,IFNULL(a.Account,'') AS TeacherAccount
FROM rb_teacher AS t LEFT JOIN rb_group AS g ON t.Group_Id=g.GId
     LEFT JOIN rb_school AS s ON t.School_Id=s.SId
     LEFT JOIN rb_account as a ON (t.TId=a.AccountId AND a.AccountType=2)
WHERE 1=1 
");
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Status), (int)DateStateEnum.Normal);
            if (query != null)
            {
                if (query.Group_Id > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Group_Id), query.Group_Id);
                }
                if (query.School_Id > -1)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.School_Id), query.School_Id);
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherName))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherName ", nameof(RB_Teacher_ViewModel.TeacherName));
                    parameters.Add("TeacherName", "%" + query.TeacherName.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherTel))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherTel ", nameof(RB_Teacher_ViewModel.TeacherTel));
                    parameters.Add("TeacherTel", "%" + query.TeacherTel.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherSay))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherSay ", nameof(RB_Teacher_ViewModel.TeacherSay));
                    parameters.Add("TeacherSay", "%" + query.TeacherSay.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeacherIntro))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeacherIntro ", nameof(RB_Teacher_ViewModel.TeacherIntro));
                    parameters.Add("TeacherIntro", "%" + query.TeacherIntro.Trim() + "%");
                }
                if (!string.IsNullOrWhiteSpace(query.TeachTag))
                {
                    builder.AppendFormat(" AND t.{0} LIKE @TeachTag ", nameof(RB_Teacher_ViewModel.TeachTag));
                    parameters.Add("TeachTag", "%" + query.TeachTag.Trim() + "%");
                }
                if (query.TId > 0)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.TId), query.TId);
                }
                if (query.IsShow != -1)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.IsShow), query.IsShow);
                }
                if ((int)query.AuditStatus != -1)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.AuditStatus), (int)query.AuditStatus);
                }
                //在职
                if (query.IsLeave == 1)
                {
                    builder.AppendFormat(" AND t.{0}<>{1} ", nameof(RB_Teacher_ViewModel.LeaveStatus), (int)LeaveStatusEnum.Departure);
                }
                //离职
                else if (query.IsLeave == 2)
                {
                    builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.LeaveStatus), (int)LeaveStatusEnum.Departure);
                }
            }
            return GetPage<RB_Teacher_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
        }

        /// <summary>
        /// 获取教师账户
        /// </summary>
        /// <param name="teacherIds"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetTeacherList(string teacherIds)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat(@"
SELECT t.*,a.Id as AccountId,s.SName,d.DeptName
FROM rb_teacher AS t 
     LEFT JOIN rb_account as a ON (t.TId=a.AccountId AND a.AccountType=2)
     LEFT JOIN rb_school AS s ON t.School_Id=s.SId
     left join rb_department as d on t.Dept_Id = d.DeptId
WHERE 1=1 
");
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Status), (int)DateStateEnum.Normal);
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.AuditStatus), (int)AccountStatusEnum.Pass);
            builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.TId), teacherIds);
            return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
        }


        /// <summary>
        /// 根据学生id获取教师账户,必须是未开班/学习中的
        /// </summary>
        /// <param name="teacherIds"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetListByStudentId(int Student_Id, int Group_Id)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat($@"
SELECT t.* from rb_teacher as t
 LEFT JOIN (SELECT ClassId,TeacherId from rb_class_plan where `Status`=0 GROUP BY ClassId,TeacherId) as cp on t.TId=cp.TeacherId
LEFT JOIN rb_class as c on cp.ClassId=c.ClassId
LEFT JOIN rb_student_orderguest as sog on sog.ClassId=c.ClassId
where t.`Status`=0 and c.`Status`=0 and sog.`Status`=0  and c.ClassStatus in(1,2) AND c.Group_Id={Group_Id}");
            builder.AppendFormat(" AND sog.Account_Id={0} ", Student_Id);
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Group_Id), Group_Id);
            return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
        }

        /// <summary>
        /// 获取教师账户
        /// </summary>
        /// <param name="teacherIds"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetTeacherByTId(int Id, int Group_Id)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat(@"
SELECT t.*,a.Id as AccountId,s.SName,d.DeptName
FROM rb_teacher AS t 
     LEFT JOIN rb_account as a ON (t.TId=a.AccountId AND a.AccountType=2)
     LEFT JOIN rb_school AS s ON t.School_Id=s.SId
     left join rb_department as d on t.Dept_Id = d.DeptId
WHERE 1=1 
");
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Status), (int)DateStateEnum.Normal);
            builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.AuditStatus), (int)AccountStatusEnum.Pass);
            builder.AppendFormat(" AND t.{0}  ={1} ", nameof(RB_Teacher_ViewModel.TId), Id);
            if (Group_Id > 0)
            {
                builder.AppendFormat(" AND a.Group_Id  ={0} ", Group_Id);
            }
            
            return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
        }


        /// <summary>
        /// 获取教师账户
        /// </summary>
        /// <param name="teacherIds"></param>
        /// <returns></returns>
        public List<RB_Teacher_ViewModel> GetTeacherByTeacherIdsList(string teacherIds)
        {
            var parameters = new DynamicParameters();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat(@"
SELECT t.*
FROM rb_teacher AS t 
WHERE 1=1 
");
            builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.TId), teacherIds);
            return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
        }


    }
}