/**
 * usePushNotifications.ts
 * React hook that orchestrates the full push notification subscription lifecycle:
 *  1. Check browser support
 *  2. Register the service worker
 *  3. Request notification permission
 *  4. Subscribe via PushManager
 *  5. Register the subscription with the Ethora backend (API)
 *  6. Listen for subscription-change messages from the SW and re-register
 *
 * Logs every major step to the console so developers can trace the flow.
 */
interface UsePushNotificationsOptions {
    /** Enable or disable the push notification flow. Default: true */
    enabled?: boolean;
    /**
     * URL-safe Base64 encoded VAPID public key.
     * Falls back to the VITE_VAPID_PUBLIC_KEY environment variable.
     */
    vapidPublicKey?: string;
    /**
     * Service worker path and scope for Firebase Messaging.
     * Defaults to `/firebase-messaging-sw.js` with scope `/`.
     */
    serviceWorkerPath?: string;
    serviceWorkerScope?: string;
    /** Custom icon URL/path for browser OS notifications. */
    iconPath?: string;
    /** Custom badge URL/path for browser OS notifications. */
    badgePath?: string;
    /**
     * Custom Firebase configuration object.
     * If provided, it overrides the environment variables.
     */
    firebaseConfig?: any;
    /**
     * Show a UI "soft ask" before triggering the browser permission dialog.
     * When true the hook will NOT immediately request permission;
     * instead the consumer should call `requestPermission()` manually.
     * Default: false (immediate request after login).
     */
    softAsk?: boolean;
    /**
     * Optional push click handler. When provided, has priority over
     * config.pushNotifications.onClick from Redux config.
     */
    onClick?: (params: {
        roomJID?: string;
        messageId?: string;
        url?: string;
        data?: Record<string, any>;
        notification?: {
            title?: string;
            body?: string;
        };
        source?: 'service_worker' | 'foreground';
    }) => void | Promise<void>;
}
interface UsePushNotificationsResult {
    /** Manually trigger the permission + subscription flow (for soft-ask UIs). */
    requestPermission: () => Promise<void>;
}
declare const usePushNotifications: (options?: UsePushNotificationsOptions) => UsePushNotificationsResult;
export default usePushNotifications;
