"""
VITA — Vivanco Intelligent Training Assistant

A coaching library for resistance training. You calibrate a lift once, then VITA
estimates your reps in reserve on every set, tracks fatigue across the session,
and prescribes your next sets.

  VITA is the software.  The Vivanco Proximity-to-Failure Model (VPFM) is the
  math engine inside it -- it lives in ``vita.core``.

Start here (the coaching layer):
  bench = vita.calibrate(weight1=315, reps1=5, weight2=275, reps2=9, name="Bench Press")
  workout = vita.Workout(bench)
  workout.predict_set(weight=295, reps=5)     # what will this cost?
  workout.target_reps(weight=275, rir=2)      # how many reps for 2 in reserve?
  workout.log_set(weight=275, reps=7)         # log it; get a readout back
  workout.build_plan(weight=275, target_rir=2, sets=5)
  workout.summary()                           # how did the session go?

Numbers are rounded for reading; full precision is kept internally. The advanced
math (LoadRepCurve, total_load, rir_interval, Params) is exposed for power users
but most lifters never need it.

Package layout:
  vita.core         the VPFM engine (LoadRepCurve, Params, Session, rir_interval, ...)
  vita.calibration  Lift + calibrate() / calibrate_bodyweight()
  vita.workout      Workout + the result objects
  vita.coaching     presentation: status, formatting, (soon) recommendations

Dependencies: standard library; numpy only for rir_interval; pandas only for
Plan.to_frame().
"""

from __future__ import annotations

# --- VPFM engine (advanced) ---
from .core import (
    LoadRepCurve,
    Params,
    Session,
    SetResult,
    total_load,
    rir_interval,
    BODYWEIGHT_FRACTION,
)

# --- coaching layer (start here) ---
from .calibration import (
    Lift,
    Calibration,
    FitReport,
    calibrate,
    calibrate_bodyweight,
)
from .workout import Prediction, LoggedSet, Plan, WorkoutSummary, Workout
from .coaching import set_output, get_output
from .fitting import ObservedSet, observed_session, FatigueFit, fit_fatigue, coverage
from ._help import (
    help,
    info,
)  # help kept out of __all__ (shadows builtin); info is safe
from .tour import tour

__version__ = "0.5.0"

__all__ = [
    # --- getting started ---
    "info",
    "tour",
    # --- coaching layer (start here) ---
    "calibrate",
    "calibrate_bodyweight",
    "Calibration",
    "FitReport",
    "Lift",
    "Workout",
    "Prediction",
    "LoggedSet",
    "Plan",
    "WorkoutSummary",
    "set_output",
    "get_output",
    # --- science: fitting the fatigue model to data ---
    "fit_fatigue",
    "ObservedSet",
    "observed_session",
    "FatigueFit",
    "coverage",
    # --- VPFM engine (advanced) ---
    "LoadRepCurve",
    "Params",
    "Session",
    "SetResult",
    "total_load",
    "rir_interval",
    "BODYWEIGHT_FRACTION",
]
