import { EventEmitter2 } from '@nestjs/event-emitter';
import { Model, Types } from 'mongoose';
import { TripStatus } from '../common/constants/enums';
import type { JwtUserPayload } from '../auth/jwt.types';
import { UsersService } from '../users/users.service';
import { Trip, TripDocument } from './schemas/trip.schema';
import { PunchDocument } from '../punches/schemas/punch.schema';
import { GpsPointDocument } from '../gps/schemas/gps-point.schema';
import { GpsStopDocument } from '../gps/schemas/gps-stop.schema';
import { TrackingEventDocument } from '../tracking/schemas/tracking-event.schema';
import { TrackingCoverageSnapshotDocument } from '../tracking/schemas/tracking-coverage-snapshot.schema';
import { CreateTripDto, UpdateTripDto } from './dto/trip.dto';
import { AddNextClientDto } from './dto/add-next-client.dto';
import { FuelRatesService } from '../settings/fuel-rates.service';
export declare class TripsService {
    private readonly tripModel;
    private readonly punchModel;
    private readonly gpsPointModel;
    private readonly gpsStopModel;
    private readonly trackingEventModel;
    private readonly trackingCoverageModel;
    private readonly users;
    private readonly events;
    private readonly fuelRates;
    constructor(tripModel: Model<TripDocument>, punchModel: Model<PunchDocument>, gpsPointModel: Model<GpsPointDocument>, gpsStopModel: Model<GpsStopDocument>, trackingEventModel: Model<TrackingEventDocument>, trackingCoverageModel: Model<TrackingCoverageSnapshotDocument>, users: UsersService, events: EventEmitter2, fuelRates: FuelRatesService);
    private tripJson;
    private normalizeUserId;
    private buildTripUserMap;
    create(actor: JwtUserPayload, dto: CreateTripDto): Promise<{
        id: string;
        tripId: string;
        userId: string;
        requestDate: Date;
        city?: string;
        fromLocation?: string;
        toLocation?: string;
        originLat?: number;
        originLng?: number;
        clientName?: string;
        destinationLat?: number;
        destinationLng?: number;
        googlePlaceId?: string;
        plannedDistance?: number;
        vehicleType?: import("../common/constants/enums").VehicleType;
        fuelType?: import("../common/constants/enums").FuelType;
        purpose?: string;
        status: TripStatus;
        totalDistance: number;
        travelDuration: number;
        idleTime: number;
        meetingDuration: number;
        productivityScore?: number;
        tripEfficiency?: number;
        startedAt?: Date;
        arrivedAt?: Date;
        completedAt?: Date;
        tripLegs?: Record<string, unknown>[];
        currentLegIndex?: number;
        _id: Types.ObjectId;
        __v: number;
    }>;
    private resolveActorUserId;
    private buildUserScopedQuery;
    getOne(tripId: string, actor: JwtUserPayload): Promise<Record<string, unknown>>;
    findByTripId(tripId: string): Promise<Record<string, unknown>>;
    private enrichTripFinancials;
    findDocumentByTripId(tripId: string): Promise<TripDocument>;
    list(actor: JwtUserPayload, filters: {
        userId?: string;
        status?: TripStatus;
        from?: string;
        to?: string;
        cursor?: string;
        limit?: number;
    }): Promise<{
        items: Record<string, unknown>[];
        nextCursor: string | null;
    }>;
    paginateTravelRequests(actor: JwtUserPayload, params: {
        mine?: boolean;
        page?: number;
        limit?: number;
        userId?: string;
    }): Promise<{
        items: Record<string, unknown>[];
        meta: {
            page: number;
            limit: number;
            total: number;
            totalPages: number;
            pending: number;
            completed: number;
        };
    }>;
    getActiveTrip(actor: JwtUserPayload): Promise<Record<string, unknown>>;
    summary(actor: JwtUserPayload, mine?: boolean): Promise<{
        total: number;
        pending: number;
        completed: number;
    }>;
    updateStatus(tripId: string, status: TripStatus, actor: JwtUserPayload): Promise<{
        id: string;
        tripId: string;
        userId: string;
        requestDate: Date;
        city?: string;
        fromLocation?: string;
        toLocation?: string;
        originLat?: number;
        originLng?: number;
        clientName?: string;
        destinationLat?: number;
        destinationLng?: number;
        googlePlaceId?: string;
        plannedDistance?: number;
        vehicleType?: import("../common/constants/enums").VehicleType;
        fuelType?: import("../common/constants/enums").FuelType;
        purpose?: string;
        status: TripStatus;
        totalDistance: number;
        travelDuration: number;
        idleTime: number;
        meetingDuration: number;
        productivityScore?: number;
        tripEfficiency?: number;
        startedAt?: Date;
        arrivedAt?: Date;
        completedAt?: Date;
        tripLegs?: Record<string, unknown>[];
        currentLegIndex?: number;
        _id: Types.ObjectId;
        __v: number;
    }>;
    update(tripId: string, actor: JwtUserPayload, dto: UpdateTripDto): Promise<{
        id: string;
        tripId: string;
        userId: string;
        requestDate: Date;
        city?: string;
        fromLocation?: string;
        toLocation?: string;
        originLat?: number;
        originLng?: number;
        clientName?: string;
        destinationLat?: number;
        destinationLng?: number;
        googlePlaceId?: string;
        plannedDistance?: number;
        vehicleType?: import("../common/constants/enums").VehicleType;
        fuelType?: import("../common/constants/enums").FuelType;
        purpose?: string;
        status: TripStatus;
        totalDistance: number;
        travelDuration: number;
        idleTime: number;
        meetingDuration: number;
        productivityScore?: number;
        tripEfficiency?: number;
        startedAt?: Date;
        arrivedAt?: Date;
        completedAt?: Date;
        tripLegs?: Record<string, unknown>[];
        currentLegIndex?: number;
        _id: Types.ObjectId;
        __v: number;
    }>;
    updateFromLegacyPatch(tripId: string, actor: JwtUserPayload, body: Record<string, unknown>): Promise<Record<string, unknown>>;
    addNextClient(tripId: string, actor: JwtUserPayload, dto: AddNextClientDto): Promise<Record<string, unknown>>;
    startReturnTrip(tripId: string, actor: JwtUserPayload, _location?: {
        timestamp?: string;
        latitude?: number;
        longitude?: number;
    }): Promise<Record<string, unknown>>;
    getActiveTrips(userIds?: string[]): Promise<{
        user: {
            uid: string;
            fullName: string;
            employeeCode: string;
            presence: import("../common/constants/enums").EmployeePresence;
        } | null;
        id: string;
        tripId: string;
        userId: string;
        requestDate: Date;
        city?: string;
        fromLocation?: string;
        toLocation?: string;
        originLat?: number;
        originLng?: number;
        clientName?: string;
        destinationLat?: number;
        destinationLng?: number;
        googlePlaceId?: string;
        plannedDistance?: number;
        vehicleType?: import("../common/constants/enums").VehicleType;
        fuelType?: import("../common/constants/enums").FuelType;
        purpose?: string;
        status: TripStatus;
        totalDistance: number;
        travelDuration: number;
        idleTime: number;
        meetingDuration: number;
        productivityScore?: number;
        tripEfficiency?: number;
        startedAt?: Date;
        arrivedAt?: Date;
        completedAt?: Date;
        tripLegs?: Record<string, unknown>[];
        currentLegIndex?: number;
        _id: Types.ObjectId;
        __v: number;
    }[]>;
    updateMetrics(tripId: string, metrics: {
        totalDistance?: number;
        travelDuration?: number;
        idleTime?: number;
        meetingDuration?: number;
        productivityScore?: number;
        tripEfficiency?: number;
    }): Promise<{
        id: string;
        tripId: string;
        userId: string;
        requestDate: Date;
        city?: string;
        fromLocation?: string;
        toLocation?: string;
        originLat?: number;
        originLng?: number;
        clientName?: string;
        destinationLat?: number;
        destinationLng?: number;
        googlePlaceId?: string;
        plannedDistance?: number;
        vehicleType?: import("../common/constants/enums").VehicleType;
        fuelType?: import("../common/constants/enums").FuelType;
        purpose?: string;
        status: TripStatus;
        totalDistance: number;
        travelDuration: number;
        idleTime: number;
        meetingDuration: number;
        productivityScore?: number;
        tripEfficiency?: number;
        startedAt?: Date;
        arrivedAt?: Date;
        completedAt?: Date;
        tripLegs?: Record<string, unknown>[];
        currentLegIndex?: number;
        _id: Types.ObjectId;
        __v: number;
    } | null>;
    remove(tripId: string, actor: JwtUserPayload): Promise<{
        ok: boolean;
        tripId: string;
    }>;
    private canDeleteTrip;
    assertCanRead(actor: JwtUserPayload, tripId: string): Promise<import("mongoose").Document<unknown, {}, Trip, {}, import("mongoose").DefaultSchemaOptions> & Trip & {
        _id: Types.ObjectId;
    } & {
        __v: number;
    } & {
        id: string;
    }>;
    private assertCanViewTrip;
    private assertCanModifyTrip;
}
