import { ActivityInterface } from '../../activities/activity.interface';
import { type DurabilityEvidenceValue } from '../../data/data.durability-evidence';
export interface DurabilityProtocol {
    smoothingWindowSeconds: number;
    warmupSeconds: number;
    cooldownSeconds: number;
    minimumActivityDurationSeconds: number;
    minimumQualifyingDurationSeconds: number;
    minimumCoverageRatio: number;
    maximumOutputCoefficientOfVariation: number;
    maximumHardZoneRatio: number;
    maximumFlatGradePercent: number;
    minimumFlatGradeCoverageRatio: number;
    minimumPoolComparableLengths: number;
    minimumPoolThirdLengths: number;
}
export declare const DEFAULT_DURABILITY_PROTOCOL: Readonly<DurabilityProtocol>;
export interface DurabilityTimelinePoint {
    elapsedSeconds: number;
    sampleDurationSeconds: number;
    output: number;
    heartRateBpm: number;
    aerobicEfficiency: number;
    rawOutput: number;
    rawHeartRateBpm: number;
    inComparisonWindow: boolean;
    comparisonHalf: 'first' | 'second' | null;
}
export interface ActivityDurabilityAnalysis {
    /** Aerobic-only display series. Pool evidence is length-based and intentionally has no 1 Hz timeline. */
    timeline: DurabilityTimelinePoint[];
    summary: DurabilityEvidenceValue | null;
}
export interface AnalyzeActivityDurabilityOptions {
    includeTimeline?: boolean;
}
/**
 * Hashes the effective protocol-v1 source inputs without retaining a second copy of long streams.
 * The digest is an invalidation key, not a security boundary.
 */
export declare function calculateActivityDurabilitySourceFingerprint(activity: ActivityInterface): string;
/** True when the activity still contains raw inputs from which durability can be recalculated. */
export declare function hasActivityDurabilitySourceData(activity: ActivityInterface): boolean;
export declare function calculateAerobicEfficiency(output: number | null | undefined, heartRateBpm: number | null | undefined): number | null;
export declare function analyzeActivityDurability(activity: ActivityInterface, options?: AnalyzeActivityDurabilityOptions): ActivityDurabilityAnalysis;
