using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions;
using Bit.Core.Models.StaticStore;
using Bit.Core.Utilities;
#nullable enable
namespace Bit.Core.Billing.Pricing;
public interface IPricingClient
{
///
/// Retrieve a Bitwarden plan by its . If the feature flag 'use-pricing-service' is enabled,
/// this will trigger a request to the Bitwarden Pricing Service. Otherwise, it will use the existing .
///
/// The type of plan to retrieve.
/// A Bitwarden record or null in the case the plan could not be found or the method was executed from a self-hosted instance.
/// Thrown when the request to the Pricing Service fails unexpectedly.
Task GetPlan(PlanType planType);
///
/// Retrieve a Bitwarden plan by its . If the feature flag 'use-pricing-service' is enabled,
/// this will trigger a request to the Bitwarden Pricing Service. Otherwise, it will use the existing .
///
/// The type of plan to retrieve.
/// A Bitwarden record.
/// Thrown when the for the provided could not be found or the method was executed from a self-hosted instance.
/// Thrown when the request to the Pricing Service fails unexpectedly.
Task GetPlanOrThrow(PlanType planType);
///
/// Retrieve all the Bitwarden plans. If the feature flag 'use-pricing-service' is enabled,
/// this will trigger a request to the Bitwarden Pricing Service. Otherwise, it will use the existing .
///
/// A list of Bitwarden records or an empty list in the case the method is executed from a self-hosted instance.
/// Thrown when the request to the Pricing Service fails unexpectedly.
Task> ListPlans();
}