using Fitness_core_BE.DTOs.PlatformBilling; using Fitness_core_BE.Models; namespace Fitness_core_BE.Interfaces.Services { // Computes and generates the platform's own bill to a gym ("Client"): a per-active-member // SaaS fee (with minimum/cap), device rental, and one-time setup fees. Distinct from // CustomerInvoice/CustomerSubscription, which is the gym billing its own members. public interface IPlatformBillingService { Task> GetPricingPlansAsync(CancellationToken ct = default); Task UpsertPricingPlanAsync(UpsertPricingPlanRequest request, CancellationToken ct = default); Task GetDevicePricingAsync(CancellationToken ct = default); Task UpdateDevicePricingAsync(DevicePricingDto request, CancellationToken ct = default); Task AssignPricingPlanAsync(Guid clientId, AssignPricingPlanRequest request, CancellationToken ct = default); Task ComputeMonthlyFeeAsync(Guid clientId, CancellationToken ct = default); Task GenerateMonthlyInvoiceAsync(Guid clientId, CancellationToken ct = default); Task GenerateOnboardingInvoiceAsync(Guid clientId, CancellationToken ct = default); Task> RunMonthlyBillingForAllClientsAsync(CancellationToken ct = default); Task RunAndChargeSubscriptionBillingAsync(CancellationToken ct = default); Task> GetPendingInvoicesAsync(CancellationToken ct = default); Task> GetCompletedInvoicesAsync(CancellationToken ct = default); Task RecordClientInvoicePaymentAsync(Guid clientInvoiceId, decimal amount, CancellationToken ct = default); Task SendClientPaymentLinkAsync(Guid clientInvoiceId, CancellationToken ct = default); } }