import { computed } from 'vue' import { libraryService } from '../services/library.service' import { subscriptionService } from '../services/subscription.service' import { useAuthStore } from '../stores/auth' /** * Access Control Composable * Check user access to content (subscription or rental) */ export function useAccess() { const authStore = useAuthStore() /** * Check if user has access to specific content */ async function checkContentAccess(contentId: string): Promise<{ hasAccess: boolean method?: 'subscription' | 'rental' expiresAt?: string }> { if (!authStore.isAuthenticated) { return { hasAccess: false } } // Check subscription first (instant check) if (authStore.hasActiveSubscription()) { return { hasAccess: true, method: 'subscription' } } // Check if we're in development mode const useMockData = import.meta.env.VITE_USE_MOCK_DATA === 'true' || import.meta.env.DEV if (useMockData) { // In dev mode without subscription, no access (prompt rental) return { hasAccess: false } } // Real API call to check rental try { return await libraryService.checkContentAccess(contentId) } catch (error) { console.error('Failed to check access:', error) return { hasAccess: false } } } /** * Check if user has active subscription */ const hasActiveSubscription = computed(() => { return authStore.hasActiveSubscription() }) /** * Get user's subscription tier */ async function getSubscriptionTier() { if (!authStore.isAuthenticated) return null try { const subscription = await subscriptionService.getActiveSubscription() return subscription?.tier || null } catch { return null } } /** * Check if content requires subscription */ function requiresSubscription(_content: any): boolean { // All content requires subscription or rental unless explicitly free return true } /** * Check if content can be rented */ function canRent(_content: any): boolean { return !!_content.rentalPrice && _content.rentalPrice > 0 } return { checkContentAccess, hasActiveSubscription, getSubscriptionTier, requiresSubscription, canRent, } }