// ***********************************************************************
// 
//     AgileWebs
// 
// ***********************************************************************
using Core.Thalos.BuildingBlocks;
using Core.Thalos.Domain.Contexts.Onboarding.Request;
namespace Core.Thalos.Provider.Contracts
{
    /// 
    /// Interface for Permission-related service operations.
    /// 
    public interface IPermissionProvider
    {
        /// 
        /// Creates a new Permission.
        /// 
        /// The Permission to be created.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask CreatePermission(PermissionRequest newPermission, CancellationToken cancellationToken);
        /// 
        /// Gets a Permission by its identifier.
        /// 
        /// The Permission Mongo identifier.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask GetPermissionById(string _id, CancellationToken cancellationToken);
        /// 
        /// Gets all Permissions.
        /// 
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask> GetAllPermissions(CancellationToken cancellationToken);
        /// 
        /// Gets all Permissions by a list of identifiers.
        /// 
        /// The list of Permission identifiers.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask> GetAllPermissionsByList(string[] permissions, CancellationToken cancellationToken);
        /// 
        /// Changes the status of a Permission.
        /// 
        /// The Permission Mongo identifier.
        /// The new status of the Permission.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask ChangePermissionStatus(string _id, Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken);
        /// 
        /// Updates a Permission.
        /// 
        /// The Permission to be updated.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask UpdatePermission(PermissionAdapter entity, CancellationToken cancellationToken);
        /// 
        /// Deletes a Permission by its identifier.
        /// 
        /// The Permission Mongo identifier.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask DeletePermission(string _id, CancellationToken cancellationToken);
    }
}