import { Model, Types } from "mongoose";
import { Request, Response } from "express";
import { WorkoutSessionDocument } from "./schemas/workout-session.schema";
import { TrainingPlanDocument } from "src/training-plan/schemas/training-plan.schema";
import { ExerciseDocument } from "src/exercise/schemas/exercise.schema";
import { UserDocument } from "src/user/schemas/user.schema";
import { PerformanceDocument } from "src/performance/schemas/performance.schema";
import { ManualPerformanceDocument } from "src/strength/schemas/manual-performance.schema";
import { ResponseService } from "src/common/service/response.service";
import { CreateWorkoutSessionDto } from "./dto/create-workout-session.dto";
export declare class WorkoutSessionService {
    private workoutSessionModel;
    private trainingPlanModel;
    private exerciseModel;
    private userModel;
    private performanceModel;
    private manualPerformanceModel;
    private readonly resService;
    constructor(workoutSessionModel: Model<WorkoutSessionDocument>, trainingPlanModel: Model<TrainingPlanDocument>, exerciseModel: Model<ExerciseDocument>, userModel: Model<UserDocument>, performanceModel: Model<PerformanceDocument>, manualPerformanceModel: Model<ManualPerformanceDocument>, resService: ResponseService);
    private readonly DEFAULT_TRAINING_FREQUENCY;
    private isAssistedCategory;
    private buildWorkoutSummary;
    createWorkoutSession(body: CreateWorkoutSessionDto, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    countWorkoutsForWeek(userId: Types.ObjectId, weekStart: Date, weekEnd: Date): Promise<number>;
    private getWorkoutDays;
    private buildWeek;
    private buildMonthWeeks;
    private computeStreakStats;
    getWeeklyStreak(req: Request, res: Response, user: any, monthQuery?: string, yearQuery?: string): Promise<Response<any, Record<string, any>>>;
    getStreakSummary(userId: Types.ObjectId): Promise<{
        completedStreak: number;
        trainingFrequency: number;
        currentWeekWorkouts: number;
        currentWeekRemaining: number;
        currentWeekCompleted: boolean;
        monthCompletedWeeks: number;
        monthTotalWeeks: number;
        weeks: {
            weekStart: any;
            weekEnd: any;
            daysDone: any;
            required: number;
            isCompleted: any;
            isCurrentWeek: any;
        }[];
    }>;
    getRecentFrequencyWeeks(userId: Types.ObjectId, weeksWindow?: number): Promise<any[]>;
    private getLifetimeFrequencyStats;
    private buildFrequencyWeeks;
    private buildFrequencyCalendar;
    getTrainingFrequency(req: Request, res: Response, user: any, viewQuery?: string, weeksQuery?: string, monthQuery?: string, yearQuery?: string): Promise<Response<any, Record<string, any>>>;
}
