import { Type } from "class-transformer";
import {
  IsArray,
  IsDateString,
  IsMongoId,
  IsNumber,
  IsOptional,
  ValidateNested,
} from "class-validator";
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";

export class PerformanceExerciseDto {
  @ApiProperty({ description: "Exercise ID" })
  @IsMongoId()
  exercise_id: string;

  @ApiPropertyOptional({ description: "Reps (Weight & Reps, Reps Only, Assisted BW, Weighted BW)" })
  @IsOptional()
  @IsNumber()
  reps?: number;

  @ApiPropertyOptional({ description: "Weight in kg (Weight & Reps)" })
  @IsOptional()
  @IsNumber()
  weight?: number;

  @ApiPropertyOptional({ description: "Duration in seconds (Time/Hold, Distance & Time)" })
  @IsOptional()
  @IsNumber()
  duration?: number;

  @ApiPropertyOptional({ description: "Distance in km (Distance & Time)" })
  @IsOptional()
  @IsNumber()
  distance?: number;

  @ApiPropertyOptional({ description: "Assistance in kg — negative value (Assisted Bodyweight)" })
  @IsOptional()
  @IsNumber()
  assisted_weight?: number;

  @ApiPropertyOptional({ description: "Added load in kg — positive value (Weighted Bodyweight)" })
  @IsOptional()
  @IsNumber()
  added_weight?: number;
}

export class CreatePerformanceDto {
  @ApiProperty({ example: "2025-06-17", description: "Date of the personal record entry" })
  @IsDateString()
  date: string;

  @ApiProperty({
    type: [PerformanceExerciseDto],
    description: "One or more exercises for this date — each saved as a separate record",
  })
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => PerformanceExerciseDto)
  exercises: PerformanceExerciseDto[];
}
