using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;

using FreeSql;
using XHD.Core.IRepository;
using XHD.Core.Models;
using XHD.Core.Common;

namespace XHD.Core.Repository
{
    public class Sys_role_empRepository : BaseRepository<Sys_role_emp>, ISys_role_empRepository
    {
        public Sys_role_empRepository(IFreeSql freesql)
        {
            _fsql = freesql;
        }

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="expWhere"></param>
        /// <param name="Page"></param>
        /// <param name="Limit"></param>
        /// <param name="expOrder"></param>
        /// <returns></returns>
        public async new Task<XHDData<Sys_role_emp>> GridAsync(Expression<Func<Sys_role_emp, bool>> expWhere, int Page, int Limit)
        {
            var data = await _fsql.Select<Sys_role_emp>()
                .LeftJoin(a => a.Role.id == a.RoleID)
                .LeftJoin(a => a.Employee.id == a.empID)
                .Where(expWhere)
                //.OrderBy(orderby)
                .Page(Page, Limit)
                .Count(out var total)
                .ToListAsync();

            //构建返回数据
            XHDData<Sys_role_emp> result = new XHDData<Sys_role_emp>()
            {
                data = data,
                count = total
            };

            return result;
        }

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="expWhere"></param>
        /// <param name="Page"></param>
        /// <param name="Limit"></param>
        /// <param name="expOrder"></param>
        /// <returns></returns>
        public async new Task<XHDData<Sys_role_emp>> GridAsync(Expression<Func<Sys_role_emp, bool>> expWhere, int Page, int Limit, string orderby)
        {
            if (string.IsNullOrWhiteSpace(orderby))
            {
                return await GridAsync(expWhere, Page, Limit);
            }

            var data = await _fsql.Select<Sys_role_emp>()
                .LeftJoin(a => a.Role.id == a.RoleID)
                .LeftJoin(a => a.Employee.id == a.empID)
                .Where(expWhere)
                .OrderBy(orderby)
                .Page(Page, Limit)
                .Count(out var total)
                .ToListAsync();

            //构建返回数据
            XHDData<Sys_role_emp> result = new XHDData<Sys_role_emp>()
            {
                data = data,
                count = total
            };

            return result;
        }

        /// <summary>
        /// 普通条件查询
        /// </summary>
        /// <param name="expWhere"></param>
        /// <returns></returns>
        public async new Task<List<Sys_role_emp>> GridAsync(Expression<Func<Sys_role_emp, bool>> expWhere)
        {
            var data = await _fsql.Select<Sys_role_emp>()
                .LeftJoin(a => a.Role.id == a.RoleID)
                .LeftJoin(a => a.Employee.id == a.empID)
                    .Where(expWhere)
                    .ToListAsync();

            return data;
        }

        /// <summary>
        /// 普通条件查询带排序
        /// </summary>
        /// <param name="expWhere"></param>
        /// <param name="OrderBy"></param>
        /// <returns></returns>
        public async new Task<List<Sys_role_emp>> GridAsync(Expression<Func<Sys_role_emp, bool>> expWhere, string OrderBy)
        {
            if (string.IsNullOrWhiteSpace(OrderBy))
            {
                return await GridAsync(expWhere);
            }

            var data = await _fsql.Select<Sys_role_emp>()
                .LeftJoin(a => a.Role.id == a.RoleID)
                .LeftJoin(a => a.Employee.id == a.empID)
                    .Where(expWhere)
                    .OrderBy(OrderBy)
                    .ToListAsync();

            return data;
        }
    }
}
