import { Socket, Server } from "socket.io";
import { ChatAuthGuard } from 'src/auth/auth.guard';
import { ModelsService } from 'src/models/models.service';
import { CommonService } from 'src/common/common.service';
import { CallService } from './call.service';
import { AcceptRejectDto, JoinCallConnectionDto } from './dto/call.dto';
import { Types } from 'mongoose';
interface CustomSocket extends Socket {
    user_data: any;
}
export declare class CallGateway {
    private readonly callService;
    private readonly chatAuthService;
    private readonly common;
    private readonly model;
    private projection;
    private lean_options;
    private new_options;
    server: Server;
    constructor(callService: CallService, chatAuthService: ChatAuthGuard, common: CommonService, model: ModelsService);
    handleConnection(socket: Socket): Promise<void>;
    updateCallStatus(socket: CustomSocket, payload: AcceptRejectDto): Promise<{
        data: any;
    }>;
    joinCallConnection(socket: CustomSocket, payload: JoinCallConnectionDto): Promise<void>;
    leaveCallConnection(socket: CustomSocket, payload: JoinCallConnectionDto): Promise<void>;
    acceptRejectCall(user_id: Types.ObjectId, payload: AcceptRejectDto, socket?: CustomSocket): Promise<{
        data: any;
    }>;
    acceptCall(user_id: Types.ObjectId, call_id: Types.ObjectId, socket?: CustomSocket): Promise<{
        message: string;
        call_id: Types.ObjectId;
        user_id: Types.ObjectId;
    } | undefined>;
    rejectCall(user_id: Types.ObjectId, call_id: Types.ObjectId, socket?: CustomSocket): Promise<{
        message: string;
        call_id: Types.ObjectId;
        user_id: Types.ObjectId;
    } | undefined>;
    endCall(user_id: Types.ObjectId, call_id: Types.ObjectId, socket?: CustomSocket): Promise<{
        message: string;
        call_id: Types.ObjectId;
        user_id: Types.ObjectId;
    } | undefined>;
    notAnswerCall(user_id: Types.ObjectId, call_id: Types.ObjectId, socket?: CustomSocket): Promise<{
        message: string;
        call_id: Types.ObjectId;
        user_id: Types.ObjectId;
        is_all_member_not_answered: boolean;
    } | undefined>;
    afterInit(server: Server): void;
    handleDisconnect(socket: Socket): Promise<void>;
    handleRejoinCall(socket: CustomSocket, payload: {
        channel_name: string;
    }): Promise<void>;
    private sendCallEndNotification;
    private sendCallDeclinedNotification;
}
export {};
