using BCards.Web.Models; using Stripe; namespace BCards.Web.Services; public interface IPaymentService { Task CreateCheckoutSessionAsync(string userId, string planType, string returnUrl, string cancelUrl); Task CreateOrGetCustomerAsync(string userId, string email, string name); Task HandleWebhookAsync(string requestBody, string signature); Task> GetPricesAsync(); Task CancelSubscriptionAsync(string subscriptionId); Task UpdateSubscriptionAsync(string subscriptionId, string newPriceId); Task GetPlanLimitationsAsync(string planType); // Novos métodos para gerenciamento de assinatura Task GetSubscriptionDetailsAsync(string userId); Task> GetPaymentHistoryAsync(string userId); Task CreatePortalSessionAsync(string customerId, string returnUrl); // Métodos para cancelamento com diferentes políticas Task CancelSubscriptionImmediatelyAsync(string subscriptionId, bool refund = false); Task CancelSubscriptionAtPeriodEndAsync(string subscriptionId); Task CreatePartialRefundAsync(string subscriptionId, decimal refundAmount); Task<(bool CanRefundFull, bool CanRefundPartial, decimal RefundAmount)> CalculateRefundAsync(string subscriptionId); }