import { JwtService } from '@nestjs/jwt';
import { OnGatewayConnection, OnGatewayDisconnect } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { PresenceService } from '../presence/presence.service';
import { PrivateChatService } from '../private-chat/private-chat.service';
import { LobbyService } from '../lobby/lobby.service';
import { RealtimeUser } from './interfaces/realtime-user.interface';
type AuthenticatedSocket = Socket & {
    user?: RealtimeUser;
};
export declare class RealtimeGateway implements OnGatewayConnection, OnGatewayDisconnect {
    private readonly jwtService;
    private readonly presenceService;
    private readonly privateChatService;
    private readonly lobbyService;
    server: Server;
    private readonly logger;
    private readonly onlineUsers;
    private readonly devLobbyMessages;
    private readonly devPrivateMessages;
    constructor(jwtService: JwtService, presenceService: PresenceService, privateChatService: PrivateChatService, lobbyService: LobbyService);
    handleConnection(client: AuthenticatedSocket): Promise<void>;
    handleDisconnect(client: AuthenticatedSocket): Promise<void>;
    handlePing(client: AuthenticatedSocket): {
        event: string;
        data: {
            userId: string | undefined;
            timestamp: string;
        };
    };
    handlePresenceList(): {
        event: string;
        data: ({
            id: string | undefined;
            userId: string | undefined;
            username: string | undefined;
            email: string | undefined;
            role: string | undefined;
        } | null)[];
    };
    handleJoinLobby(client: AuthenticatedSocket): {
        event: string;
        data: {
            room: string;
        };
    };
    handleLeaveLobby(client: AuthenticatedSocket): {
        event: string;
        data: {
            room: string;
        };
    };
    handleTypingStart(client: AuthenticatedSocket, body: {
        room?: string;
        receiverId?: string;
    }): void;
    handleTypingStop(client: AuthenticatedSocket, body: {
        room?: string;
        receiverId?: string;
    }): void;
    handleLobbyMessageSend(client: AuthenticatedSocket, body: {
        content: string;
        room?: string;
        messageType?: string;
        replyToMessageId?: string;
    }): Promise<{
        event: string;
        data: {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        } | {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string | null;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        };
    } | undefined>;
    handleLobbyMessageLegacy(client: AuthenticatedSocket, body: {
        content: string;
        room?: string;
        messageType?: string;
    }): Promise<{
        event: string;
        data: {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        } | {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string | null;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        };
    } | undefined>;
    handleLobbyHistory(client: AuthenticatedSocket, body: {
        room?: string;
        limit?: number;
    }): Promise<{
        event: string;
        data: any[];
    }>;
    handleLegacyMessageSend(client: AuthenticatedSocket, body: {
        content: string;
        room?: string;
        messageType?: string;
    }): Promise<{
        event: string;
        data: {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        } | {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            room: string;
            content: string;
            messageType: string;
            replyToMessageId: string | null;
            status: string;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        };
    } | undefined>;
    handlePrivateMessageSend(client: AuthenticatedSocket, body: {
        receiverId: string;
        content: string;
        messageType?: string;
        replyToMessageId?: string;
    }): Promise<{
        event: string;
        data: {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            receiver: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            receiverId: string;
            content: string;
            messageType: string;
            replyToMessageId: string;
            status: string;
            isDelivered: boolean;
            isRead: boolean;
            deliveredAt: Date;
            readAt: Date;
            isEdited: boolean;
            isDeleted: boolean;
            createdAt: Date;
            updatedAt: Date;
        } | {
            sender: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            receiver: {
                id: string | undefined;
                userId: string | undefined;
                username: string | undefined;
                email: string | undefined;
                role: string | undefined;
            } | null;
            id: string;
            senderId: string;
            receiverId: string;
            content: string;
            messageType: string;
            replyToMessageId: string | null;
            status: string;
            isDelivered: boolean;
            isRead: boolean;
            isEdited: boolean;
            isDeleted: boolean;
            deliveredAt: Date | null;
            readAt: null;
            createdAt: Date;
            updatedAt: Date;
        };
    } | undefined>;
    handlePrivateMessageHistory(client: AuthenticatedSocket, body: {
        otherUserId: string;
        limit?: number;
    }): Promise<{
        event: string;
        data: any[];
    }>;
    handlePrivateMessageDelivered(client: AuthenticatedSocket, body: {
        messageId: string;
        senderId?: string;
    }): Promise<{
        event: string;
        data: any;
    }>;
    handlePrivateMessageRead(client: AuthenticatedSocket, body: {
        messageId: string;
    }): Promise<{
        event: string;
        data: any;
    }>;
    private safeMarkOnline;
    private safeMarkOffline;
    private getUserFromSocket;
    private getDevUserFromSocket;
    private createDevLobbyMessage;
    private createDevPrivateMessage;
    private updateDevPrivateMessageStatus;
    private getOnlineUsers;
    private publicUser;
}
export {};
