import { Model, Types } from "mongoose";
import { Request, Response } from "express";
import { ResponseService } from "src/common/service/response.service";
import { ManualPerformanceDocument } from "./schemas/manual-performance.schema";
import { PerformanceDocument } from "src/performance/schemas/performance.schema";
import { WorkoutSessionDocument } from "src/workout-session/schemas/workout-session.schema";
import { ExerciseDocument } from "src/exercise/schemas/exercise.schema";
import { ExerciseCategoryDocument } from "src/exercise/schemas/exercise-category.schema";
import { CreateManualPerformanceDto } from "./dto/create-manual-performance.dto";
import { UpdateManualPerformanceDto } from "./dto/update-manual-performance.dto";
type StrengthPeriod = "7d" | "30d" | "3m" | "6m" | "all";
type StrengthMetricKey = "weight" | "added_weight" | "assisted_weight" | "distance" | "duration" | "reps";
export declare class StrengthService {
    private manualPerformanceModel;
    private performanceModel;
    private workoutSessionModel;
    private exerciseModel;
    private exerciseCategoryModel;
    private readonly resService;
    constructor(manualPerformanceModel: Model<ManualPerformanceDocument>, performanceModel: Model<PerformanceDocument>, workoutSessionModel: Model<WorkoutSessionDocument>, exerciseModel: Model<ExerciseDocument>, exerciseCategoryModel: Model<ExerciseCategoryDocument>, resService: ResponseService);
    create(dto: CreateManualPerformanceDto, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    getByDate(date: string, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    getExerciseHistory(exerciseId: string, page: number, limit: number, res: Response, req: Request, user: any): Promise<Response<any, Record<string, any>>>;
    getPersonalRecords(req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    getPersonalRecordHistory(exerciseId: string, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    update(id: string, dto: UpdateManualPerformanceDto, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    remove(id: string, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    getStrengthGraph(exerciseId: string, period: StrengthPeriod, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    buildStrengthGraphData(exId: Types.ObjectId, userId: Types.ObjectId, period: StrengthPeriod): Promise<{
        metric: {
            key: StrengthMetricKey;
            unit: string;
        };
        graph: Array<{
            label: string;
            value: number | null;
        }>;
        stats: Record<string, any>;
    } | null>;
    getMostRecentExerciseId(userId: Types.ObjectId): Promise<Types.ObjectId | null>;
    getExerciseIdentity(exId: Types.ObjectId, lang: string): Promise<{
        _id: any;
        name: string;
        category: {
            _id: any;
            name: string;
        };
    }>;
    getExerciseEntries(exerciseId: string, period: StrengthPeriod, req: Request, res: Response, user: any): Promise<Response<any, Record<string, any>>>;
    private toEntryRow;
    private getCategoryFieldKeys;
    private remapWeightForCategory;
    private readonly SET_FIELDS;
    private scoreOf;
    private pickBestSet;
    private resolveMetricKey;
    private defaultUnitFor;
    private resolveRange;
    private buildGraphData;
    private getISOWeek;
}
export {};
