// Auto-generated by scripts/build-engines.mjs for slug "hybrid-training-planner".
// Schema: https://aifithub.io/contracts/hybrid-training-planner.json

/** A Monday–Sunday hybrid schedule (am/pm sessions; the interval and tempo runs on their own days where possible) from weekly running volume, its easy/tempo/interval split, lifting sessions and a priority, with run kilometres by intensity, interference warnings and a rough relative load index. */
export interface Input {
  /** Weekly running distance, km (sets 2–5 run days: ≤15, ≤30, ≤50, more). Unit: km/week. Range: 0 to 200. Default: 30. */
  weekly_run_km?: number;
  /** Share of running at easy pace, percent (70 = 70%); the three shares are scaled to 100. Unit: percent. Range: 0 to 100. Default: 70. */
  easy_pct?: number;
  /** Share of running at tempo, percent. Unit: percent. Range: 0 to 100. Default: 20. */
  tempo_pct?: number;
  /** Share of running as intervals, percent. Unit: percent. Range: 0 to 100. Default: 10. */
  interval_pct?: number;
  /** Lifting sessions per week (whole number). Unit: sessions/week. Range: 2 to 6. Default: 3. */
  lifting_sessions?: number;
  /** Which modality gets the prime slots: strength (lift-first), endurance (run-first) or balanced (alternating). Default: "balanced". */
  primary_goal?: "strength" | "endurance" | "balanced";
}

export interface Output {
  /** 7 days of { day, am, pm, type } where type is run, lift, combo or rest; runs are Easy run, Tempo run or Intervals. */
  schedule?: Array<{ "day"?: string; "am"?: string; "pm"?: string; "type"?: string }>;
  /** Array of { message, severity }: interference between adjacent days, volume cautions, scaling and dropped sessions. */
  warnings?: Array<{ "message"?: string; "severity"?: string }>;
  /** Rough relative load: 5 per lift + 0.8/1.5/2.0 per easy/tempo/interval km. */
  totalTrainingLoad?: number;
  /** { easy, tempo, interval } km per week. */
  runVolume?: { "easy"?: number; "tempo"?: number; "interval"?: number };
  /** Recovery guidance for the load band (<30, 30–60, >60). */
  recoveryNote?: 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;
