using AsbCloudApp.Services;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using AsbCloudApp.Data.User;

namespace AsbCloudApp.Repositories
{
    /// <summary>
    /// Разрешения на доступ к данным
    /// </summary>
    public interface IUserRoleRepository : ICrudRepository<UserRoleDto>
    {
        /// <summary>
        /// получить dto по названиям
        /// </summary>
        /// <param name="names"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task<IEnumerable<UserRoleDto>> GetByNamesAsync(IEnumerable<string> names, CancellationToken token = default);

        /// <summary>
        /// получить все вложенные разрешения
        /// </summary>
        /// <param name="id"></param>
        /// <param name="counter"></param>
        /// <returns></returns>
        IEnumerable<UserRoleDto> GetNestedById(int id, int counter = 10);

        /// <summary>
        /// определяет содержится ли разрешение в одной из указанных ролей
        /// </summary>
        /// <param name="rolesIds"></param>
        /// <param name="permissionName"></param>
        /// <returns></returns>
        bool HasPermission(IEnumerable<int> rolesIds, string permissionName);
    }
}