namespace Core.Blueprint.KeyVault
{
    /// 
    /// Interface for managing secrets in Azure Key Vault.
    /// 
    public interface IKeyVaultProvider
    {
        /// 
        /// Creates a new secret in Azure Key Vault.
        /// 
        /// The request containing the name and value of the secret.
        /// The cancellation token to cancel the operation.
        /// A  containing the details of the created secret.
        ValueTask CreateSecretAsync(KeyVaultRequest keyVaultRequest, CancellationToken cancellationToken);
        /// 
        /// Deletes a secret from Azure Key Vault if it exists.
        /// 
        /// The name of the secret to delete.
        /// The cancellation token to cancel the operation.
        /// 
        /// A  containing a status message and a boolean indicating whether the secret was successfully deleted.
        /// 
        ValueTask<(string Message, bool Deleted)> DeleteSecretAsync(string secretName, CancellationToken cancellationToken);
        /// 
        /// Retrieves a secret from Azure Key Vault.
        /// 
        /// The name of the secret to retrieve.
        /// The cancellation token to cancel the operation.
        /// 
        /// A  containing the  with secret details 
        /// and an optional error message if the secret was not found.
        /// 
        ValueTask<(KeyVaultResponse Secret, string? Message)> GetSecretAsync(string secretName, CancellationToken cancellationToken);
        /// 
        /// Updates an existing secret in Azure Key Vault. If the secret does not exist, an error is returned.
        /// 
        /// The updated secret information.
        /// The cancellation token to cancel the operation.
        /// 
        /// A  containing the updated  and an optional error message if the secret was not found.
        /// 
        ValueTask<(KeyVaultResponse Secret, string? Message)> UpdateSecretAsync(KeyVaultRequest newSecret, CancellationToken cancellationToken);
    }
}