using Entity.DbModel.System;
using Entity.Dto.Req;
using HybirdFrameworkCore.Autofac.Attribute;
using Repository.System;

namespace Service.Mgr
{
    [Scope("SingleInstance")]
    public class SysRoleMenuMgr
    {
        private readonly SysRoleMenuRepository _sysRoleMenuRep;

        public SysRoleMenuMgr(SysRoleMenuRepository sysRoleMenuRep)
        {
            _sysRoleMenuRep = sysRoleMenuRep;
        }
        /// <summary>
        /// 根据角色Id集合获取菜单Id集合
        /// </summary>
        /// <param name="roleIdList"></param>
        /// <returns></returns>
        public async Task<List<long>> GetRoleMenuIdList(List<long> roleIdList)
        {
            return await _sysRoleMenuRep.QueryByClauseAsync(u => roleIdList.Contains(u.RoleId), u => u.MenuId);
        }

        /// <summary>
        /// 授权角色菜单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task GrantRoleMenu(RoleMenuReq input)
        {
            await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == input.Id);
            var menus = input.MenuIdList.Select(u => new SysRoleMenu
            {
                RoleId = input.Id,
                MenuId = u
            }).ToList();
            await _sysRoleMenuRep.InsertAsync(menus);
        }

        /// <summary>
        /// 根据菜单Id集合删除角色菜单
        /// </summary>
        /// <param name="menuIdList"></param>
        /// <returns></returns>
        public async Task DeleteRoleMenuByMenuIdList(List<long> menuIdList)
        {
            await _sysRoleMenuRep.DeleteAsync(u => menuIdList.Contains(u.MenuId));
        }

        /// <summary>
        /// 根据角色Id删除角色菜单
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public async Task DeleteRoleMenuByRoleId(long roleId)
        {
            await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == roleId);
        }
    }
}