namespace OASystem.API.Controllers
{
    /// <summary>
    /// 系统设置
    /// </summary>
    //[Authorize]
    [Route("api/[controller]/[action]")]
    public class SystemController : ControllerBase
    {
        private readonly CompanyRepository _syscomRep;
        private readonly DepartmentRepository _sysDepRep;
        private readonly UsersRepository _userRep;
        private readonly IMapper _mapper;

        public SystemController( CompanyRepository syscom,DepartmentRepository sysDepRep, UsersRepository userRep,
            IMapper mapper)
        {
            _syscomRep = syscom;
            _sysDepRep = sysDepRep;
            _userRep = userRep;
            _mapper = mapper;
        }

        #region user 操作

        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> GetUserList(DtoBase dto)
        {
            try
            {
                var result = _userRep.GetUserList(dto.PortType,string.Empty);
                if (result.Result.Code != 0)
                {
                    return Ok(JsonView(false, "暂无数据!"));

                }
                return Ok(JsonView(result.Result.Data));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }

        #endregion

        #region 企业操作
        /// <summary>
        /// 查询企业数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> getCompanyList(DtoBase dto)
        {
            try
            {
                if (dto.PortType == 1)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else if (dto.PortType == 2)
                {
                    var companyList = _sysDepRep.QueryDto<Sys_Company, CompanyIView>(a=>a.ToBool(true)).ToList();
                    if (companyList.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(companyList));
                }
                else if (dto.PortType == 3)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }

        [HttpPost]
        [ProducesResponseType(typeof(JsonView),StatusCodes.Status200OK)]
        public async Task<IActionResult> AddCompany(AddCompanyDto dto)
        {
            AddCompany _Company = _mapper.Map<AddCompany>(dto);
            int id = await _syscomRep.AddAsyncReturnId(_Company);
            return Ok(JsonView(0, "成功", _Company));
        }
        #endregion

        #region 部门操作

        /// <summary>
        /// 查询部门数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> QueryDepartmentList(DepartmentDto dto)
        {
            try
            {
                if (dto.PortType==1)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else if (dto.PortType==2)
                {
                    var result = _sysDepRep.QueryDto<Sys_Department, DepartmentIView>(s => s.CompanyId == dto.CompanyId).ToList();
                    if (result.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(result));
                }
                else if (dto.PortType == 3)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
         
        }
        #endregion

        #region 用户操作
        /// <summary>
        /// 查询用户数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> QueryUserList(UserDto dto)
        {
            try
            {
                string sqlWhere = string.Empty;
                if (dto.CompanyId!=0)
                {
                    sqlWhere += string.Format(@" And su.CompanyId={0}", dto.CompanyId);
                }
                if (dto.DepId != 0)
                {
                    sqlWhere += string.Format(@" And su.DepId={0}", dto.DepId);
                }
                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                {
                    Regex r = new Regex("And");
                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
                }
                var result=_userRep.GetUserList(dto.PortType,sqlWhere);
                if (result.Result.Code!=0)
                {
                    return Ok(JsonView(false, "暂无数据!"));

                }
                return Ok(JsonView(result.Result.Data));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
           
        }
        #endregion

    }
}