namespace LMEMappeCatastaliApp.Services; public interface IPlayBillingService { Task> GetSubscriptionPlansAsync(CancellationToken cancellationToken = default); Task RestoreAsync(CancellationToken cancellationToken = default); Task PurchaseAsync(string basePlanId, CancellationToken cancellationToken = default); } public sealed record PlaySubscriptionPlan(string BasePlanId, string FormattedPrice, string BillingPeriod); public sealed record PlayBillingResult( bool Completed, bool HasActiveSubscription, bool UserCancelled, string Message, string? PurchaseToken = null) { public static PlayBillingResult Active(string message, string? purchaseToken = null) => new(true, true, false, message, purchaseToken); public static PlayBillingResult Base(string message) => new(true, false, false, message); public static PlayBillingResult Cancelled(string message) => new(false, false, true, message); public static PlayBillingResult Failed(string message) => new(false, false, false, message); } public sealed class UnavailablePlayBillingService : IPlayBillingService { public Task> GetSubscriptionPlansAsync(CancellationToken cancellationToken = default) => Task.FromResult>([]); public Task RestoreAsync(CancellationToken cancellationToken = default) => Task.FromResult(PlayBillingResult.Failed("Google Play Billing è disponibile solo nell'app Android installata da Google Play.")); public Task PurchaseAsync(string basePlanId, CancellationToken cancellationToken = default) => Task.FromResult(PlayBillingResult.Failed("Google Play Billing è disponibile solo nell'app Android installata da Google Play.")); }