import {
  IsArray,
  IsMongoId,
  IsNumber,
  IsObject,
  IsOptional,
  IsString,
  ValidateNested,
} from "class-validator";
import { Type } from "class-transformer";

export class UpdateTrainingSetDto {
  // Dynamic numeric values keyed by the exercise category's field keys.
  @IsObject()
  values: Record<string, number>;
}

export class UpdatePlanExerciseDto {
  @IsMongoId()
  exercise_id: string;

  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => UpdateTrainingSetDto)
  sets: UpdateTrainingSetDto[];
}

export class UpdatePlanDayDto {
  @IsObject()
  name: Record<string, string>;

  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => UpdatePlanExerciseDto)
  exercises: UpdatePlanExerciseDto[];
}

export class UpdateTrainingPlanDto {
  @IsOptional()
  @IsObject()
  name?: Record<string, string>;

  @IsOptional()
  @IsObject()
  description?: Record<string, string>;

  @IsOptional()
  @IsObject()
  subtitle?: Record<string, string>;

  @IsOptional()
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => UpdatePlanDayDto)
  days?: UpdatePlanDayDto[];

  @IsOptional()
  @IsString()
  attachment?: string;

  @IsOptional()
  @IsNumber()
  status?: number;
}
