// Auto-generated by scripts/build-engines.mjs for slug "marathon-pace-elevation".
// Schema: https://aifithub.io/contracts/marathon-pace-elevation.json

/** Average race pace and the flat-equivalent pace for a target time and distance on a hilly course, using a rule-of-thumb elevation cost of 1.5 s per metre of total climb minus 0.75 s per metre of total descent; paces in seconds per km with m:ss labels. */
export interface Input {
  /** Race distance in km (marathon 42.195). Unit: km. Range: 0.1 to 1000. Default: 42.195. */
  target_distance_km?: number;
  /** Target finish time in minutes (3:30 = 210). Unit: min. Range: 0.1 to ∞. Default: 240. */
  target_time_minutes?: number;
  /** Total climb over the course, metres (not net). Unit: m. Range: 0 to ∞. Default: 200. */
  total_elevation_gain_m?: number;
  /** Total descent over the course, metres. Unit: m. Range: 0 to ∞. Default: 200. */
  total_elevation_loss_m?: number;
}

export interface Output {
  targetDistanceKm?: number;
  targetTimeMinutes?: number;
  /** Average race pace, s/km. */
  averagePaceSecondsPerKm?: number;
  /** Average pace as m:ss per km. */
  averagePaceLabel?: string;
  /** Flat-course pace for the same effort, s/km. */
  flatEquivalentPaceSecondsPerKm?: number;
  /** Same as m:ss per km. */
  flatEquivalentPaceLabel?: string;
  /** Net elevation cost on finish time, s (negative on net-downhill courses). */
  netElevationCorrectionSeconds?: number;
  /** Even-pace per-km splits { segmentKm, paceSecondsPerKm, paceLabel }. */
  segments?: Array<{ "segmentKm"?: number; "paceSecondsPerKm"?: number; "paceLabel"?: string }>;
  /** downhill_aided, flat, rolling, climbing or extreme (net climb per km). */
  difficulty?: string;
  [key: string]: unknown;
}

/** Throws an Error naming the field when an input is unknown, mistyped or out of range. */
export declare function compute(input?: Input): Output;
