import React, { createContext, useContext, ReactNode } from 'react'; import { useSimklIntegration } from '../hooks/useSimklIntegration'; import { SimklWatchlistItem, SimklPlaybackData, SimklRatingItem, SimklUserSettings, SimklStats, SimklStatus } from '../services/simklService'; export interface SimklContextProps { // Authentication isAuthenticated: boolean; isLoading: boolean; userSettings: SimklUserSettings | null; userStats: SimklStats | null; // Collections - Shows watchingShows: SimklWatchlistItem[]; planToWatchShows: SimklWatchlistItem[]; completedShows: SimklWatchlistItem[]; onHoldShows: SimklWatchlistItem[]; droppedShows: SimklWatchlistItem[]; // Collections - Movies watchingMovies: SimklWatchlistItem[]; planToWatchMovies: SimklWatchlistItem[]; completedMovies: SimklWatchlistItem[]; onHoldMovies: SimklWatchlistItem[]; droppedMovies: SimklWatchlistItem[]; // Collections - Anime watchingAnime: SimklWatchlistItem[]; planToWatchAnime: SimklWatchlistItem[]; completedAnime: SimklWatchlistItem[]; onHoldAnime: SimklWatchlistItem[]; droppedAnime: SimklWatchlistItem[]; // Special collections continueWatching: SimklPlaybackData[]; ratedContent: SimklRatingItem[]; // Lookup Sets (for O(1) status checks) watchingSet: Set; planToWatchSet: Set; completedSet: Set; onHoldSet: Set; droppedSet: Set; // Methods checkAuthStatus: () => Promise; refreshAuthStatus: () => Promise; loadAllCollections: () => Promise; addToStatus: (imdbId: string, type: 'movie' | 'show' | 'anime', status: SimklStatus) => Promise; removeFromStatus: (imdbId: string, type: 'movie' | 'show' | 'anime', status: SimklStatus) => Promise; isInStatus: (imdbId: string, type: 'movie' | 'show' | 'anime', status: SimklStatus) => boolean; // Scrobbling methods (from existing hook) startWatching?: (content: any, progress: number) => Promise; updateProgress?: (content: any, progress: number) => Promise; stopWatching?: (content: any, progress: number) => Promise; syncAllProgress?: () => Promise; fetchAndMergeSimklProgress?: () => Promise; } const SimklContext = createContext(undefined); export function SimklProvider({ children }: { children: ReactNode }) { const simklIntegration = useSimklIntegration(); return ( {children} ); } export function useSimklContext() { const context = useContext(SimklContext); if (context === undefined) { throw new Error('useSimklContext must be used within a SimklProvider'); } return context; }