import { WebSocket } from 'ws';
import { Player } from '../models/Player.js';
export declare class PlayerSession {
    readonly userId: string;
    readonly player: Player;
    private ws;
    private tickInterval;
    private batchedUpdate;
    private tickCounter;
    constructor(ws: WebSocket, player: Player);
    /** Whether the underlying WebSocket connection is fully open */
    get isWSOpen(): boolean;
    ownsWebSocket(ws: WebSocket): boolean;
    start(): void;
    stop(): void;
    get isRunning(): boolean;
    private tick;
    private advanceMinute;
    private processMinuteTick;
    private processHourTick;
    private processDayTick;
    /**
     * Roll daily weather based on seasonal probabilities.
     * Returns a weather type with seasonal weighting.
     */
    static rollDailyWeather(season: string): 'sunny' | 'cloudy' | 'rainy' | 'snowy' | 'stormy' | 'windy' | 'foggy';
    private processWeekTick;
    private sendBatchedUpdate;
    send(message: unknown): void;
    sendPlayerObject(): void;
    savePlayer(): Promise<void>;
    /**
     * Sync all in-memory conversations to the dedicated conversations table.
     * Called during savePlayer to ensure no conversation data is lost.
     */
    private syncConversationsToTable;
    /**
     * Drain the player's lifecycle queue and fire retention handlers.
     * Events are queued by event functions (which lack session access)
     * and processed here where the session is available.
     */
    private drainLifecycleQueue;
    disconnect(): void;
}
//# sourceMappingURL=PlayerSession.d.ts.map