export interface Activity { date: Date; activityType?: string; title?: string; distance?: number; // in kilometers duration?: number; // in minutes trainingStressScore?: number; calories?: number; averageHR?: number; maxHR?: number; totalAscent?: number; // in meters } export interface ProcessedData { activities: Activity[]; dates: string[]; distances: (number | null)[]; durations: (number | null)[]; tss: (number | null)[]; } export interface MetricACWRData { dates: string[]; values: (number | null)[]; // Daily sum values average7d: (number | null)[]; // 7-day rolling average average28d: (number | null)[]; // 28-day rolling average acwr: (number | null)[]; // ACWR based on this metric targetTomorrowValue?: number | null; // Value needed tomorrow to reach target ACWR of 1.3 targetACWR?: number; // The target ACWR value used for calculation restTomorrowACWR?: number | null; // What ACWR would be with a rest day tomorrow todayValue?: number | null; // Today's value for reference activitiesByDate?: Map; // Activities grouped by date // Future predictions (filtered - only significant activities) futureDates?: string[]; // Dates for future predictions (filtered) futureValues?: (number | null)[]; // Optimal activity values for future days (filtered) futureAverage7d?: (number | null)[]; // Predicted 7-day rolling average (filtered) futureAverage28d?: (number | null)[]; // Predicted 28-day rolling average (filtered) futureAcwr?: (number | null)[]; // Predicted ACWR values (filtered) // Complete future predictions (including rest days for ACWR curve continuity) allFutureDates?: string[]; // All future dates including rest days allFutureValues?: number[]; // All future values including low values allFutureAverage7d?: number[]; // All 7-day averages allFutureAverage28d?: number[]; // All 28-day averages allFutureAcwr?: number[]; // All ACWR values for curve continuity }