/**
 * Notification Manager
 *
 * Smart notification throttling and delivery logic.
 * Decides whether to send a push notification based on:
 * - Device token availability
 * - App background state (only send when backgrounded)
 * - Throttle limits (max 4 notifications per hour per player)
 * - Event importance (category-based priority)
 */
import { type PushPayload, type NotificationCategory, type SendResult } from './pushNotificationService.js';
import type { Player } from '../../models/Player.js';
/** Get remaining notification budget for a player this hour */
export declare function getRemainingBudget(userId: string): number;
export interface NotifyOptions {
    /** Player's user ID (for throttling) */
    userId: string;
    /** Device token for push delivery */
    deviceToken: string;
    /** Whether the app is currently in the background */
    isBackgrounded: boolean;
    /** Notification payload */
    payload: PushPayload;
}
export interface NotifyResult {
    sent: boolean;
    reason?: string;
    sendResult?: SendResult;
}
/**
 * Attempt to send a push notification with smart throttling.
 *
 * Checks:
 * 1. Device token is present
 * 2. App is backgrounded (no point sending push if user is active)
 * 3. Player hasn't exceeded hourly throttle limit
 * 4. Delegates to pushNotificationService for actual delivery
 */
export declare function notify(options: NotifyOptions): Promise<NotifyResult>;
/**
 * Convenience: send a realtime event notification.
 * Called from PlayerSession when a realtime-mode event fires and the app is backgrounded.
 */
export declare function notifyRealtimeEvent(userId: string, deviceToken: string, isBackgrounded: boolean, eventTitle: string, eventMessage: string, category?: NotificationCategory, deepLinkId?: string): Promise<NotifyResult>;
/**
 * Check if a push notification should be sent for a given player.
 * Checks device token, connection state (as proxy for backgrounded), and throttle.
 */
export declare function shouldSendNotification(player: Player, category?: NotificationCategory): boolean;
/**
 * Queue and send a realtime notification for a player if appropriate.
 * High-level convenience for use in the game loop.
 */
export declare function queueRealtimeNotification(player: Player, event: {
    title: string;
    body: string;
    type: NotificationCategory;
    id?: string;
}): Promise<NotifyResult>;
/**
 * Clear throttle data for a specific user.
 * Call when a player disconnects to free memory.
 */
export declare function clearThrottle(userId: string): void;
/**
 * Clear all throttle data. Useful for tests.
 */
export declare function clearAllThrottles(): void;
//# sourceMappingURL=notificationManager.d.ts.map