import { DataBare } from './data.bare';
import { DataJSONInterface } from './data.json.interface';
export declare const DURABILITY_PROTOCOL_VERSION: 1;
export declare const DURABILITY_PROTOCOL_ELIGIBILITY_THRESHOLDS: Readonly<{
    minimumActivityDurationSeconds: number;
    minimumQualifyingDurationSeconds: number;
    minimumCoverageRatio: 0.6;
    maximumOutputCoefficientOfVariation: 0.25;
    maximumHardZoneRatio: 0.2;
    minimumPoolComparableLengths: 24;
    minimumPoolThirdLengths: 8;
}>;
export type DurabilityDiscipline = 'cycling' | 'running' | 'open-water-swimming' | 'pool-swimming';
export type DurabilityOutputSource = 'power' | 'grade-adjusted-speed' | 'speed' | 'pool-length-speed';
export type DurabilityOutputUnit = 'W' | 'm/s';
export type DurabilityEligibilityReason = 'eligible' | 'unsupported-activity' | 'missing-output' | 'missing-heart-rate' | 'insufficient-duration' | 'insufficient-coverage' | 'insufficient-halves' | 'too-variable' | 'too-intense' | 'unsupported-context';
export interface DurabilityContext {
    poolLengthMeters: number;
    stroke: string;
}
export interface DurabilityEligibility {
    eligible: boolean;
    reason: DurabilityEligibilityReason;
    validSampleCount: number;
    comparisonSegments: 'halves' | 'outer-thirds';
    earlySampleCount: number;
    lateSampleCount: number;
    outputCoefficientOfVariation: number | null;
    hardZoneRatio: number | null;
}
export interface AerobicDurabilityEvidence {
    kind: 'aerobic-efficiency';
    firstHalfEfficiency: number;
    secondHalfEfficiency: number;
    decouplingPercent: number;
    firstHalfOutput: number;
    secondHalfOutput: number;
    outputRetentionPercent: number;
    firstHalfHeartRateBpm: number;
    secondHalfHeartRateBpm: number;
    heartRateDriftBpm: number;
}
export interface PoolDurabilityEvidence {
    kind: 'pool-consistency';
    poolLengthMeters: number;
    stroke: string;
    comparableLengthCount: number;
    firstPaceSecondsPer100m: number;
    finalPaceSecondsPer100m: number;
    paceRetentionPercent: number;
    firstSwolf: number | null;
    finalSwolf: number | null;
    swolfChange: number | null;
}
export type DurabilityEvidence = AerobicDurabilityEvidence | PoolDurabilityEvidence;
export interface DurabilityEvidenceValue {
    protocolVersion: typeof DURABILITY_PROTOCOL_VERSION;
    /** Deterministic digest of every activity input used by protocol v1. */
    sourceFingerprint: string;
    discipline: DurabilityDiscipline;
    outputSource: DurabilityOutputSource;
    outputUnit: DurabilityOutputUnit;
    context: DurabilityContext | null;
    durationSeconds: number;
    qualifyingDurationSeconds: number;
    coverageRatio: number;
    eligibility: DurabilityEligibility;
    evidence: DurabilityEvidence | null;
}
/** Compact activity-level durability summary. Timelines and source streams are intentionally not persisted. */
export declare class DataDurabilityEvidence extends DataBare<DurabilityEvidenceValue> {
    static type: string;
    constructor(value: DurabilityEvidenceValue | unknown);
    setValue(value: DurabilityEvidenceValue): this;
    getDurabilityValue(): DurabilityEvidenceValue;
    isValueTypeValid(value: unknown): boolean;
    toJSON(): DataJSONInterface;
}
/** Returns a compact canonical value and strips every unknown field, including timelines. */
export declare function normalizeDurabilityEvidenceValue(value: unknown): DurabilityEvidenceValue | null;
export declare function normalizeComparablePoolStroke(value: unknown): string | null;
