import { Types } from 'mongoose';
import { ShareRideSessionDocument } from 'src/booking/schema/share-ride-session.schema';
import { DbService } from 'src/db/db.service';
import { RedisService } from 'src/redis/redis.service';
import { BookingGateway } from 'src/booking/booking.gateway';
import { FindCompatibleSessionsDto, StepDoneDto } from 'src/booking/dto/share-ride.dto';
import { NotificationService } from './notification.service';
export declare const SHARE_RIDE_STEP_UPDATED = "share_ride_step_updated";
export declare const SHARE_RIDE_PARTNER_JOINED = "share_ride_partner_joined";
export declare const SHARE_RIDE_JOIN_REQUEST = "share_ride_join_request";
export declare const SHARE_RIDE_NEW_STOP_ADDED = "share_ride_new_stop_added";
export declare const SHARE_RIDE_PASSENGER_CANCELLED = "share_ride_passenger_cancelled";
export declare const SHARE_RIDE_PASSENGER_BOARDED = "share_ride_passenger_boarded";
export declare const SHARE_RIDE_PASSENGER_DEBOARDED = "share_ride_passenger_deboarded";
export declare class ShareRideService {
    private readonly model;
    private readonly redisService;
    private readonly bookingGateway;
    private readonly notificationService;
    private readonly logger;
    constructor(model: DbService, redisService: RedisService, bookingGateway: BookingGateway, notificationService: NotificationService);
    private getDistance;
    private estimateTime;
    private toRad;
    private getBearing;
    private bearingDelta;
    private isDirectionCompatible;
    private buildRemainingStops;
    private computeArrivalTimes;
    private bestInsertion;
    findCompatibleSessions(dto: FindCompatibleSessionsDto): Promise<{
        count: number;
        data: any[];
    }>;
    _checkRouteCompatibility(session: any, newPickupLat: number, newPickupLng: number, newDropLat: number, newDropLng: number, maxDetourMinutes: number): Promise<boolean>;
    joinShareRideSession(sessionId: string, newBooking: any): Promise<{
        message: string;
        session_id: string;
        pending: boolean;
    }>;
    private _sendJoinRequestToDriver;
    driverRespondToJoin(sessionId: string, bookingId: string, accepted: boolean, driverId: string): Promise<{
        message: string;
    }>;
    private toPoint;
    private computeTotalDistance;
    private bestSequenceInsertion;
    _addPassengerToSession(session: any, newBooking: any, driverLocation: any): Promise<void>;
    handleBookingCancellation(sessionId: string, bookingId: string): Promise<void>;
    markStepDone(dto: StepDoneDto, driverId: string): Promise<{
        message: string;
        session: import("mongoose").Document<unknown, {}, import("src/booking/schema/share-ride-session.schema").ShareRideSession, {}, {}> & import("src/booking/schema/share-ride-session.schema").ShareRideSession & {
            _id: Types.ObjectId;
        } & {
            __v: number;
        };
    }>;
    createShareRideSession(booking: any, discountPercent?: number, maxPassengers?: number, driverId?: string): Promise<ShareRideSessionDocument>;
    private _notifyAllParties;
}
