// ***********************************************************************
//
// AgileWebs
//
// ***********************************************************************
using Core.Thalos.BuildingBlocks;
using Core.Thalos.Domain.Contexts.Onboarding.Request;
namespace Core.Thalos.Provider.Contracts
{
///
/// Interface for Role-related service operations.
///
public interface IRoleProvider
{
///
/// Creates a new Role.
///
/// The Role to be created.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask CreateRole(RoleRequest newRole, CancellationToken cancellationToken);
///
/// Gets a Role by its identifier.
///
/// The Role Mongo identifier.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask GetRoleById(string _id, CancellationToken cancellationToken);
///
/// Gets all Roles.
///
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask> GetAllRoles(CancellationToken cancellationToken);
///
/// Changes the status of a Role.
///
/// The Role Mongo identifier.
/// The new status of the Role.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask ChangeRoleStatus(string _id, Core.Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken);
///
/// Updates a Role.
///
/// The Role to be updated.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask UpdateRole(RoleAdapter entity, CancellationToken cancellationToken);
///
/// Adds an application to the Role's list of applications.
///
/// The identifier of the Role to which the application will be added.
/// The application enum value to add.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous operation with the updated Role.
///
ValueTask AddApplicationToRole(string roleId, ApplicationsEnum application, CancellationToken cancellationToken);
///
/// Removes an application from the Role's list of applications.
///
/// The identifier of the Role from which the application will be removed.
/// The application enum value to remove.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous operation with the updated Role.
///
ValueTask RemoveApplicationFromRole(string roleId, ApplicationsEnum application, CancellationToken cancellationToken);
///
/// Deletes a Role by its identifier.
///
/// The Role Mongo identifier.
/// A token to cancel the asynchronous operation.
///
/// A representing the asynchronous execution of the service.
///
ValueTask DeleteRole(string _id, CancellationToken cancellationToken);
}
}