import { createContext, Dispatch, SetStateAction } from 'react';

export interface OfflineMode {
    isManuallyOffline: boolean;
    isNetworkOnline: boolean;
    isOffline: boolean;
    isDatabaseInitialized: boolean;
    error: string | null;
}

export interface OfflineContextType {
    offlineMode: OfflineMode;
    setOfflineMode: Dispatch<SetStateAction<OfflineMode>>;
    toggleOfflineMode: () => void;
    initializeDatabase: (userId: string, encryptionKey?: string) => Promise<boolean>;
    isCurrentlyOffline: () => boolean;
}

export const defaultOfflineMode: OfflineMode = {
    isManuallyOffline: false,
    isNetworkOnline: typeof navigator !== 'undefined' ? navigator.onLine : true,
    isOffline: false,
    isDatabaseInitialized: false,
    error: null
};

const OfflineContext = createContext<OfflineContextType>({
    offlineMode: defaultOfflineMode,
    setOfflineMode: () => {},
    toggleOfflineMode: () => {},
    initializeDatabase: async () => false,
    isCurrentlyOffline: () => false
});

export default OfflineContext;
