import type { UUID } from 'crypto'; import type { WorkoutExerciseCTO } from '../../../ctos/workout/WorkoutExerciseCTO.js'; import type { WorkoutMesocycle } from '../../../documents/workout/WorkoutMesocycle.js'; import type { WorkoutMicrocycle } from '../../../documents/workout/WorkoutMicrocycle.js'; import type { WorkoutSession } from '../../../documents/workout/WorkoutSession.js'; import type { WorkoutSessionExercise } from '../../../documents/workout/WorkoutSessionExercise.js'; import type { WorkoutSet } from '../../../documents/workout/WorkoutSet.js'; import type WorkoutMesocyclePlanContext from '../Mesocycle/WorkoutMesocyclePlanContext.js'; /** * Describes why a session is locked and cannot be interacted with. */ export declare enum WorkoutSessionLockReason { MesocycleNotStarted = "MesocycleNotStarted", PreviousMicrocycleNotCompleted = "PreviousMicrocycleNotCompleted", PreviousSessionNotCompleted = "PreviousSessionNotCompleted" } /** * A service for handling operations related to {@link WorkoutSession}s. * * SCOPE: Session-level operations (calculating totals, managing session generation) * * RESPONSIBILITIES: * - Calculate session-level RSM/Fatigue totals * - Generate workout sessions with exercises and sets * * RELATED SERVICES: * - {@link WorkoutVolumePlanningService} - Provides set count plans for session generation * - {@link WorkoutSetService} - Generates individual sets within sessions * - {@link WorkoutSFRService} - Underlying calculations for RSM/Fatigue */ export default class WorkoutSessionService { #private; /** * Calculates the total Raw Stimulus Magnitude for a session. */ static getRsmTotal(session: WorkoutSession): number | null; /** * Calculates the total fatigue score for a session. */ static getFatigueTotal(session: WorkoutSession): number | null; /** * Calculates the Stimulus to Fatigue Ratio (SFR) for a session. */ static getSFR(session: WorkoutSession): number | null; /** * Returns the reason a session is locked, or `null` if the session is * unlocked and can be interacted with. * * A session is unlocked when: * - It has no microcycle (free-form session) * - It has no mesocycle (free-form microcycle) * - Its mesocycle has been started, the previous microcycle (if any) is * completed, and the previous session in the same microcycle (if any) * is complete. * * @param microcycle The session's parent microcycle, or null/undefined for free-form sessions. * @param mesocycle The session's parent mesocycle, or null/undefined for free-form microcycles. * @param previousMicrocycle The microcycle preceding the session's microcycle, or null/undefined if first. * @param previousSessionInMicrocycle The session before this one in the same microcycle, or null/undefined if first. */ static getSessionLockReason(microcycle: WorkoutMicrocycle | null | undefined, mesocycle: WorkoutMesocycle | null | undefined, previousMicrocycle: WorkoutMicrocycle | null | undefined, previousSessionInMicrocycle: WorkoutSession | null | undefined): WorkoutSessionLockReason | null; /** * Finds the in-progress session and the next-up session in a single pass. * - In-progress: complete === false, at least one set has actualReps != null * - Next-up: first complete === false session with no logged sets (after any in-progress) * * Sessions should be in microcycle order (as returned by getAssociatedDocsForMesocycle). * Only checks sets for incomplete sessions, skipping completed ones entirely. * * @param sessions Ordered sessions for the mesocycle. * @param sessionExerciseMap Map of session exercise ID to WorkoutSessionExercise. * @param setMap Map of set ID to WorkoutSet. */ static getActiveAndNextSessions(sessions: WorkoutSession[], sessionExerciseMap: Map, setMap: Map): { inProgressSession: WorkoutSession | null; nextUpSession: WorkoutSession | null; }; /** * Generates a session and its associated exercises and sets. */ static generateSession({ context, microcycleIndex, sessionIndex, sessionStartDate, sessionExerciseList, targetRir, isDeloadMicrocycle, setPlan }: { context: WorkoutMesocyclePlanContext; microcycleIndex: number; sessionIndex: number; sessionStartDate: Date; sessionExerciseList: WorkoutExerciseCTO[]; targetRir: number | null; isDeloadMicrocycle: boolean; setPlan: { exerciseIdToSetCount: Map; recoveryExerciseIds: Set; }; }): void; } //# sourceMappingURL=WorkoutSession.service.d.ts.map