import { ExerciseType } from "@common/enums/exercise-type.enum"; import { FitnessGoal } from "@common/enums/fitness-goal.enum"; import { FitnessLevel } from "@common/enums/fitness-level.enum"; import { Gender } from "@common/enums/gender.enum"; import { config } from "@configs/config"; const endpoint = '/fitness'; export interface IFitnessPredictionItem { bodyPart: string; equipment: string; name: string; repetitions: number; sets: number; target: string; type: string; weights_or_duration: number; } // Fitness Workout Params export interface IFWParams { home_or_gym: 0 | 1; // 0 for home, 1 for gym level: FitnessLevel; goal: FitnessGoal; gender: Gender; age: number; feedback: boolean; old_weight: number; equipments: string[]; } export class FitnessModel { public static async predictWorkout( params: IFWParams ): Promise { params.level = params.level.split(' ').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(' ') as FitnessLevel; params.goal = params.goal.split(' ').map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(' ') as FitnessGoal; params.gender = params.gender.toUpperCase() as Gender; const response = await fetch( `${config.modelsServerUrl}${endpoint}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(params), } ); if (!response.ok) { console.error(await response.text()); throw new Error("Failed to fetch data from the server"); } return response.text().then((data) => { data = data.replace('NaN', ExerciseType.DURATION.toString()).replace('\n', '') return JSON.parse(data) }); } }