// ***********************************************************************
// 
//     AgileWebs
// 
// ***********************************************************************
using Core.Thalos.BuildingBlocks;
using Core.Thalos.Domain.Contexts.Onboarding.Request;
namespace Core.Thalos.Provider.Contracts
{
    public interface IModuleProvider
    {
        /// 
        /// Creates a new Module.
        /// 
        /// The Module to be created.
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask CreateModule(ModuleRequest newModule, CancellationToken cancellationToken);
        /// 
        /// Gets an Module by identifier.
        /// 
        /// The Module identifier.
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask GetModuleById(string _id, CancellationToken cancellationToken);
        /// 
        /// Gets all the roles.
        /// 
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask> GetAllModules(CancellationToken cancellationToken);
        /// 
        /// Gets all the permissions by permissions identifier list.
        /// 
        /// The list of permissions identifiers.
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask> GetAllModulesByList(string[] modules, CancellationToken cancellationToken);
        /// 
        /// Changes the status of the permission.
        /// 
        /// The permission identifier.
        /// The new status of the permission.
        /// The  updated entity.
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask ChangeModuleStatus(string id, Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken);
        /// 
        /// Updates a Module by id.
        /// 
        /// The Module to be updated.
        /// The Module identifier.
        /// A  representing
        /// the asynchronous execution of the service.
        ValueTask UpdateModule(ModuleAdapter entity, CancellationToken cancellationToken);
    }
}