using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.Entities.System;
using OASystem.Domain.ViewModels.System;
using SqlSugar;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OASystem.Infrastructure.Repositories.System
{
    public class UsersRepository : BaseRepository<UserInfo, UserInfoWebView>
    {
        public UsersRepository(SqlSugarClient sqlSugar) : base(sqlSugar){}

        /// <summary>
        /// 用户查询列表
        /// </summary>
        /// <param name="_userRep"></param>
        /// <returns></returns>
        public async Task<Result> GetUserList(int portType,string sqlWhere)
        {
            Result result = new Result() { Code = -2 };
            
            //List<UserInfoWebView> _userList = _sqlSugar.Queryable<Sys_Users>()
            //    .InnerJoin<Sys_Company>((u, c) => u.CompanyId == c.Id) //若是多个条件 用 &&
            //    .InnerJoin<Sys_Department>((u, c, d) => u.DepId == d.Id)
            //    .InnerJoin<Sys_JobPost>((u, c, d, j) => u.JobPostId == j.Id)
            //    .Where((u) => u.Id == 208)
            //    .Select
            //    ((u, c, d, j) => new UserInfoWebView
            //    { 
            //        Number = u.Number,
            //        CompanyId = u.CompanyId, 
            //        CompanyName = c.CompanyName, 
            //        DepId=u.DepId,
            //        DepName = d.DepName,
            //        JobPostId = u.JobPostId,
            //        JobName = j.JobName,
            //        Id = u.Id,
            //        CnName = u.CnName,
            //        Phone = u.Phone,
            //        UrgentPhone = u.UrgentPhone,
            //        Ext =u.Ext,
            //        Email = u.Email,
            //    })
            //    .ToList();


            if (portType == 1) //web
            {

                string userSqlWhere = string.Format(@"Select su.CompanyId, sc.CompanyName,su.DepId,sd.DepName,su.JobPostId,sjp.JobName,
                                                        su.Id UserId,su.CnName,su.CnName,su.Number,su.Ext,su.Phone,su.UrgentPhone,su.Email
                                                      From Sys_Users su 
                                                      Inner Join Sys_Company sc On su.CompanyId = sc.Id
                                                      Inner Join Sys_Department sd On su.DepId = sd.Id
                                                      Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id ");
                var _userList = await _sqlSugar.SqlQueryable<UserInfoWebView>(userSqlWhere).ToListAsync();

                if (_userList.Count != 0)
                {
                    result.Code = 0;
                    result.Msg = "成功!";
                    result.Data = _userList;
                }
                else
                {
                    result.Msg = "暂无数据!";
                }
            }
            else if (portType == 2) //Android
            {
                string userSqlWhere = string.Format(@"Select su.CompanyId, sc.CompanyName,su.DepId,sd.DepName,su.JobPostId,sjp.JobName,
                                                        su.Id UserId,su.CnName,su.CnName,su.Number,su.Ext,su.Phone,su.UrgentPhone,su.Email
                                                      From Sys_Users su 
                                                      Inner Join Sys_Company sc On su.CompanyId = sc.Id
                                                      Inner Join Sys_Department sd On su.DepId = sd.Id
                                                      Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id ");

                var _userList = await _sqlSugar.SqlQueryable<UserInfoWebView>(userSqlWhere).ToListAsync();

                if (_userList.Count != 0)
                {
                    result.Code = 0;
                    result.Msg = "成功!";
                    result.Data = _userList;
                }
                else
                {
                    result.Msg = "暂无数据!";
                }
            }
            else if (portType == 3) //IOS
            {
            }
            else
            {
                result.Msg = "暂无数据!";
            } 
            
            return result;
        }

        /// <summary>
        /// 用户查询列表
        /// </summary>
        /// <param name="_userRep"></param>
        /// <returns></returns>
        public async Task<Result> GetUserNameList(int portType)
        {
            Result result = new Result() { Code = -2 };

            if (portType == 1 || portType == 2) //web
            {
                string sql = string.Format(@"Select Id,CnName From Sys_Users Where Isdel=0 And HrAudit = 1");
                var _userList = await _sqlSugar.SqlQueryable<UserNameView>(sql).ToListAsync();

                if (_userList.Count != 0)
                {
                    result.Code = 0;
                    result.Msg = "成功!";
                    result.Data = _userList;
                }
                else
                {
                    result.Msg = "暂无数据!";
                }
            }
            else if (portType == 2) //Android
            {
              
            }
            else if (portType == 3) //IOS
            {
            }
            else
            {
                result.Msg = "暂无数据!";
            }

            return result;
        }

        public async Task<List<UserInfo>> QueryUser(string sqlWhere)
        {
            string sql = string.Format(@"Select sc.CompanyName,sd.DepName,sjp.JobName,su.* From Sys_Users su 
                                                        left Join Sys_Company sc On su.CompanyId = sc.Id
                                                        left Join Sys_Department sd On su.DepId = sd.Id
                                                        left Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
            return await _sqlSugar.SqlQueryable<UserInfo>(sql).ToListAsync();

        }
    }
}