import { apiService } from './api.service' import type { ApiSubscription } from '../types/api' /** * Subscription Service * Handles user subscriptions */ class SubscriptionService { /** * Get user's subscriptions */ async getSubscriptions(): Promise { return apiService.get('/subscriptions') } /** * Get active subscription */ async getActiveSubscription(): Promise { const subscriptions = await this.getSubscriptions() return subscriptions.find((sub) => sub.status === 'active') || null } /** * Subscribe to a tier */ async subscribe(data: { tier: 'enthusiast' | 'film-buff' | 'cinephile' period: 'monthly' | 'annual' paymentMethodId?: string }): Promise { return apiService.post('/subscriptions', data) } /** * Cancel subscription */ async cancelSubscription(subscriptionId: string): Promise { await apiService.delete(`/subscriptions/${subscriptionId}`) } /** * Resume cancelled subscription */ async resumeSubscription(subscriptionId: string): Promise { return apiService.post(`/subscriptions/${subscriptionId}/resume`) } /** * Create a Lightning subscription invoice via BTCPay. * Returns invoice details including BOLT11 for QR code display. */ async createLightningSubscription(data: { type: 'enthusiast' | 'film-buff' | 'cinephile' period: 'monthly' | 'yearly' }): Promise<{ lnInvoice: string expiration: string sourceAmount: { amount: string; currency: string } id: string }> { return apiService.post('/subscriptions/lightning', data) } /** * Update payment method */ async updatePaymentMethod(subscriptionId: string, paymentMethodId: string): Promise { await apiService.patch(`/subscriptions/${subscriptionId}/payment-method`, { paymentMethodId, }) } /** * Get subscription tiers with pricing (in sats) */ async getSubscriptionTiers(): Promise> { return [ { tier: 'enthusiast', name: 'Enthusiast', monthlyPrice: 10000, annualPrice: 100000, features: [ 'Access to all films and series', 'HD streaming', 'Watch on 2 devices', ], }, { tier: 'film-buff', name: 'Film Buff', monthlyPrice: 21000, annualPrice: 210000, features: [ 'Everything in Enthusiast', '4K streaming', 'Watch on 4 devices', 'Exclusive behind-the-scenes content', 'Early access to new releases', ], }, { tier: 'cinephile', name: 'Cinephile', monthlyPrice: 42000, annualPrice: 420000, features: [ 'Everything in Film Buff', 'Watch on unlimited devices', 'Offline downloads', 'Director commentary tracks', 'Support independent filmmakers', ], }, ] } } export const subscriptionService = new SubscriptionService()