/**
 * Pending Conversation Events System
 *
 * Manages events triggered by AI tool calls that need player interaction.
 * Events are queued during conversations and processed by the game loop.
 *
 * Flow:
 * 1. AI uses tool (e.g., ask_for_date) → PendingConversationEvent created
 * 2. Event added to player.pendingConversationEvents
 * 3. Game loop checks for pending events each tick
 * 4. Event converted to QuestionEvent and sent to client
 * 5. Player response processed, affects game state
 *
 * Extensibility:
 * - Add new event types by creating a create*Event function
 * - Add response processing in processEventResponse
 */
import { Player } from '../../models/index.js';
import type { PendingConversationEvent, PendingEventType } from './tool_processor.js';
/**
 * Answer option for question events
 */
export interface AnswerOption {
    option: string;
    energyCost?: number;
    moneyCost?: number;
    diamondCost?: number;
}
/**
 * Question event sent to client
 */
export interface QuestionEvent {
    id: string;
    type: 'questionEvent';
    message: string;
    title?: string;
    characters: Array<{
        id: string;
        firstname: string;
        lastname?: string;
    }>;
    answers: AnswerOption[];
    image?: string;
    /** Internal data for processing response */
    _callbackData?: {
        eventType: PendingEventType;
        characterId: string;
        eventId: string;
        [key: string]: unknown;
    };
}
/**
 * Message event sent to client (notification only)
 */
export interface MessageEvent {
    id: string;
    type: 'messageEvent';
    message: string;
    title?: string;
    characters?: Array<{
        id: string;
        firstname: string;
    }>;
    date: string;
    hour: string;
    affinityChange?: number;
}
/**
 * Result of processing an event response
 */
export interface EventResponseResult {
    success: boolean;
    message?: string;
    affinityChange?: number;
    statChanges?: Record<string, number>;
    relationshipChange?: string;
    followUpEvent?: QuestionEvent | MessageEvent;
}
/**
 * Check for and process the next pending conversation event
 * Called from the game loop
 */
export declare function getNextPendingEvent(player: Player): QuestionEvent | MessageEvent | null;
/**
 * Process player's response to a pending event
 */
export declare function processEventResponse(player: Player, eventId: string, selectedOption: number, callbackData: NonNullable<QuestionEvent['_callbackData']>): EventResponseResult;
/**
 * Add a pending event to player's queue
 * If the event has immediate: true, it will be processed right away
 */
export declare function addPendingEvent(player: Player, event: PendingConversationEvent): void;
/**
 * Check if player has any pending events from a specific character
 */
export declare function hasPendingEventFrom(player: Player, characterId: string): boolean;
/**
 * Get count of pending events
 */
export declare function getPendingEventCount(player: Player): number;
//# sourceMappingURL=pending_events.d.ts.map