// ***********************************************************************
// 
//     AgileWebs
// 
// ***********************************************************************
using Core.Thalos.BuildingBlocks;
using Core.Thalos.Domain.Contexts.Onboarding.Request;
namespace Core.Thalos.Provider.Contracts
{
    /// 
    /// Interface for Tenant-related service operations.
    /// 
    public interface ITenantProvider
    {
        /// 
        /// Creates a new Tenant.
        /// 
        /// The Tenant to be created.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask CreateTenant(TenantRequest newTenant, CancellationToken cancellationToken);
        /// 
        /// Gets a Tenant by its identifier.
        /// 
        /// The Tenant Mongo identifier.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask GetTenantById(string _id, CancellationToken cancellationToken);
        /// 
        /// Gets all Tenants.
        /// 
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask> GetAllTenants(CancellationToken cancellationToken);
        /// 
        /// Changes the status of a Tenant.
        /// 
        /// The Tenant Mongo identifier.
        /// The new status of the Tenant.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask ChangeTenantStatus(string _id, Blueprint.Mongo.StatusEnum newStatus, CancellationToken cancellationToken);
        /// 
        /// Updates a Tenant.
        /// 
        /// The Tenant to be updated.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask UpdateTenant(TenantAdapter entity, CancellationToken cancellationToken);
        /// 
        /// Deletes a Tenant by its identifier.
        /// 
        /// The Tenant Mongo identifier.
        /// A token to cancel the asynchronous operation.
        /// 
        /// A  representing the asynchronous execution of the service.
        /// 
        ValueTask DeleteTenant(string _id, CancellationToken cancellationToken);
    }
}