import type React from 'react';
import { type ReactNode } from 'react';
import { OxyServices } from '../../core';
import type { User, ApiError } from '../../models/interfaces';
import type { ClientSession } from '../../models/session';
import type { UseFollowHook } from '../hooks/useFollow.types';
import { useLanguageManagement } from '../hooks/useLanguageManagement';
import type { RouteName } from '../navigation/routes';
export interface OxyContextState {
    user: User | null;
    sessions: ClientSession[];
    activeSessionId: string | null;
    isAuthenticated: boolean;
    isLoading: boolean;
    isTokenReady: boolean;
    isStorageReady: boolean;
    error: string | null;
    currentLanguage: string;
    currentLanguageMetadata: ReturnType<typeof useLanguageManagement>['metadata'];
    currentLanguageName: string;
    currentNativeLanguageName: string;
    createIdentity: () => Promise<{
        recoveryPhrase: string[];
        synced: boolean;
    }>;
    importIdentity: (phrase: string) => Promise<{
        synced: boolean;
    }>;
    signIn: (deviceName?: string) => Promise<User>;
    hasIdentity: () => Promise<boolean>;
    getPublicKey: () => Promise<string | null>;
    isIdentitySynced: () => Promise<boolean>;
    syncIdentity: () => Promise<User>;
    deleteIdentityAndClearAccount: (skipBackup?: boolean, force?: boolean, userConfirmed?: boolean) => Promise<void>;
    identitySyncState: {
        isSynced: boolean;
        isSyncing: boolean;
    };
    logout: (targetSessionId?: string) => Promise<void>;
    logoutAll: () => Promise<void>;
    switchSession: (sessionId: string) => Promise<void>;
    removeSession: (sessionId: string) => Promise<void>;
    refreshSessions: () => Promise<void>;
    setLanguage: (languageId: string) => Promise<void>;
    getDeviceSessions: () => Promise<Array<{
        sessionId: string;
        deviceId: string;
        deviceName?: string;
        lastActive?: string;
        expiresAt?: string;
    }>>;
    logoutAllDeviceSessions: () => Promise<void>;
    updateDeviceName: (deviceName: string) => Promise<void>;
    clearSessionState: () => Promise<void>;
    clearAllAccountData: () => Promise<void>;
    oxyServices: OxyServices;
    useFollow?: UseFollowHook;
    showBottomSheet?: (screenOrConfig: RouteName | {
        screen: RouteName;
        props?: Record<string, unknown>;
    }) => void;
}
declare const OxyContext: React.Context<OxyContextState | null>;
export interface OxyContextProviderProps {
    children: ReactNode;
    oxyServices?: OxyServices;
    baseURL?: string;
    storageKeyPrefix?: string;
    onAuthStateChange?: (user: User | null) => void;
    onError?: (error: ApiError) => void;
}
export declare const OxyProvider: React.FC<OxyContextProviderProps>;
export declare const OxyContextProvider: React.FC<OxyContextProviderProps>;
export declare const useOxy: () => OxyContextState;
export default OxyContext;
//# sourceMappingURL=OxyContext.d.ts.map