using langguanApi.Extensions;
using langguanApi.Extensions.AutoDI;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Model;
using langguanApi.Model.Entity;
using langguanApi.Model.SystemConfigurationEntity;
using Mapster;
using NPOI.SS.Formula.Functions;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
namespace langguanApi.Service
{
    /// 
    /// 校色服务
    /// 
    [ServiceInjection(InjectionType.Transient)]
    public class RoleService : BaseService
    {
        private readonly RoleMenuServie _roleMenuServie;
        public RoleService(IConfiguration config, RoleMenuServie roleMenuServie) : base(config, nameof(Role))
        {
            _roleMenuServie = roleMenuServie;
        }
        /// 
        /// 新增角色
        /// 
        /// 
        /// 
        public async Task Add(AddRoleDto role)
        {
            if (await base.Exist(filter => filter.RoleName == role.RoleName))
            {
                return new ApiResult() { code = 1, msg = "角色名称已存在" };
            }
            var entity = role.Adapt();
            await base.CreateAsync(entity);
            return new ApiResult() { code = 0 };
        }
        /// 
        /// 获取角色及菜单
        /// 
        /// 
        /// 
        public async Task GetRoleAndMenu(string roleId)
        {
            var role = await base.GetAsync(roleId);
            if (role != null)
            {
                var menus = await _roleMenuServie.GetByRoleId(roleId);
                return new ApiResult() { code = 0, data = new { role, menus } };
            }
            return new ApiResult() { code = 0 };
        }
        /// 
        /// 删除角色
        /// 
        /// 
        /// 
        public async Task Remove(IEnumerable ids)
        {
            if (ids.Any())
            {
                foreach (var item in ids)
                {
                    await base.RemoveAsync(item);
                }
            }
            return new ApiResult() { code = 0 };
        }
        /// 
        /// 更新角色
        /// 
        /// 
        /// 
        public async Task update(UpdateRoleDto role)
        {
            var entity = role.Adapt();
            await base.UpdateAsync(entity.Id, entity);
            return new ApiResult() { code = 0 };
        }
        /// 
        /// 分页取数据
        /// 
        /// 
        /// 
        public async Task