import { TrackingEventType } from '../common/constants/enums';
export interface CoveragePoint {
    timestamp: Date;
    latitude: number;
    longitude: number;
    legId?: string;
}
export interface CoverageTrackingEvent {
    type: TrackingEventType | string;
    timestamp: Date;
    legId?: string;
    metadata?: Record<string, unknown>;
}
export interface CoverageGap {
    from: Date;
    to: Date;
    durationMinutes: number;
    reason: string;
    suspectedCause?: string;
}
export interface LegCoverageInput {
    legId: string;
    legNumber: number;
    fromLocation?: string;
    toLocation?: string;
    departureAt: Date;
    arrivalAt: Date | null;
    points: CoveragePoint[];
    events?: CoverageTrackingEvent[];
}
export interface LegCoverageResult {
    legId: string;
    legNumber: number;
    fromLocation?: string;
    toLocation?: string;
    departureAt: string;
    arrivalAt: string | null;
    expectedDurationMinutes: number;
    trackedDurationMinutes: number;
    gapDurationMinutes: number;
    coveragePercent: number;
    pointCount: number;
    gaps: Array<{
        from: string;
        to: string;
        durationMinutes: number;
        reason: string;
        suspectedCause?: string;
    }>;
}
export declare function pointDedupeKey(timestamp: Date, latitude: number, longitude: number): string;
export declare function dedupeCoveragePoints(points: CoveragePoint[]): CoveragePoint[];
export declare function computeLegCoverage(input: LegCoverageInput, gapThresholdSeconds: number, now?: Date): LegCoverageResult;
export declare function aggregateCoverageSummary(legs: LegCoverageResult[]): {
    expectedDurationMinutes: number;
    trackedDurationMinutes: number;
    gapDurationMinutes: number;
    coveragePercent: number;
};
