import { ConfigService } from '@nestjs/config';
import type { JwtUserPayload } from '../auth/jwt.types';
import { GpsService } from '../gps/gps.service';
import { TripsService } from '../trips/trips.service';
import { UsersService } from '../users/users.service';
import type { LiveLocationPayload, TrackingLocationUpdateDto } from './dto/tracking-location.dto';
export declare class LiveTrackingService {
    private readonly config;
    private readonly trips;
    private readonly users;
    private readonly gps;
    private readonly logger;
    private readonly lastAccepted;
    constructor(config: ConfigService, trips: TripsService, users: UsersService, gps: GpsService);
    isWsEnabled(): boolean;
    authorizeJoin(actor: JwtUserPayload, tripId: string): Promise<import("mongoose").Document<unknown, {}, import("../trips/schemas/trip.schema").Trip, {}, import("mongoose").DefaultSchemaOptions> & import("../trips/schemas/trip.schema").Trip & {
        _id: import("mongoose").Types.ObjectId;
    } & {
        __v: number;
    } & {
        id: string;
    }>;
    authorizeEmit(actor: JwtUserPayload, tripId: string): Promise<{
        trip: import("mongoose").Document<unknown, {}, import("../trips/schemas/trip.schema").Trip, {}, import("mongoose").DefaultSchemaOptions> & import("../trips/schemas/trip.schema").Trip & {
            _id: import("mongoose").Types.ObjectId;
        } & {
            __v: number;
        } & {
            id: string;
        };
        user: import("mongoose").Document<unknown, {}, import("../users/schemas/user.schema").User, {}, import("mongoose").DefaultSchemaOptions> & import("../users/schemas/user.schema").User & {
            _id: import("mongoose").Types.ObjectId;
        } & {
            __v: number;
        } & {
            id: string;
        };
    }>;
    shouldAcceptPoint(tripId: string, userId: string, latitude: number, longitude: number, timestamp: Date, force?: boolean): {
        accept: boolean;
        reason?: string;
    };
    rememberAcceptedPoint(tripId: string, userId: string, latitude: number, longitude: number, timestamp: Date): void;
    clearTripCache(tripId: string, userId: string): void;
    clearTripCacheForTripId(tripId: string): void;
    normalizePayload(dto: TrackingLocationUpdateDto, userId: string, tripId: string): LiveLocationPayload;
    handleLocationUpdate(actor: JwtUserPayload, dto: TrackingLocationUpdateDto, options?: {
        force?: boolean;
    }): Promise<{
        ok: boolean;
        persisted: boolean;
        broadcast?: LiveLocationPayload;
        reason?: string;
    }>;
    canSubscribeLiveMap(actor: JwtUserPayload): boolean;
}
