import { Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { JwtService } from '@nestjs/jwt';
import { OnGatewayConnection } from '@nestjs/websockets';
import { Namespace, Socket } from 'socket.io';
import { UserRole } from '../common/constants/enums';
import { GpsService } from '../gps/gps.service';
import { GpsBatchDto } from '../gps/dto/gps.dto';
declare abstract class BaseTrackingGateway implements OnGatewayConnection {
    protected readonly jwt: JwtService;
    protected readonly config: ConfigService;
    protected readonly gps: GpsService;
    protected readonly logger: Logger;
    constructor(jwt: JwtService, config: ConfigService, gps: GpsService);
    abstract server: Namespace;
    protected abstract allowedRoles: UserRole[];
    handleConnection(client: Socket): Promise<void>;
    joinTrip(client: Socket, data: {
        tripId: string;
    }): {
        ok: boolean;
    };
    leaveTrip(client: Socket, data: {
        tripId: string;
    }): {
        ok: boolean;
    };
    subscribeLive(client: Socket): {
        ok: boolean;
    };
    unsubscribeLive(client: Socket): {
        ok: boolean;
    };
    onGpsBatch(payload: {
        tripId: string;
        lastPoint?: {
            latitude: number;
            longitude: number;
            timestamp: Date;
        };
    }): void;
    onTripUpdate(trip: unknown): void;
}
export declare class AdminGateway extends BaseTrackingGateway {
    server: Namespace;
    protected allowedRoles: UserRole[];
    constructor(jwt: JwtService, config: ConfigService, gps: GpsService);
    gpsBatch(client: Socket, data: {
        tripId: string;
        batch: GpsBatchDto;
    }): Promise<{
        inserted: number;
        tripId: string;
    }>;
}
export declare class HodGateway extends BaseTrackingGateway {
    server: Namespace;
    protected allowedRoles: UserRole[];
    constructor(jwt: JwtService, config: ConfigService, gps: GpsService);
}
export declare class EmployeeGateway extends BaseTrackingGateway {
    server: Namespace;
    protected allowedRoles: UserRole[];
    constructor(jwt: JwtService, config: ConfigService, gps: GpsService);
    gpsBatch(client: Socket, data: {
        tripId: string;
        batch: GpsBatchDto;
    }): Promise<{
        inserted: number;
        tripId: string;
    }>;
}
export {};
