import { Type } from 'class-transformer';

import {
  ArrayMaxSize,
  ArrayMinSize,
  IsArray,
  IsBoolean,
  IsInt,
  IsOptional,
  Max,
  Min,
  ValidateNested,
} from 'class-validator';

export class SaveProgressReportIssueEvaluationItemDto {
  @Type(() => Number)
  @IsInt()
  @Min(1)
  issueId!: number;

  @IsBoolean()
  isResolved!: boolean;

  /**
   * Star rating:
   * 1 = minimum
   * 5 = maximum
   */
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(5)
  rating!: number;

  @IsOptional()
  feedback?: string | Record<string, unknown> | null;
}

export class SaveProgressReportEvaluationsDto {
  @IsArray()
  @ArrayMinSize(1)
  @ArrayMaxSize(200)
  @ValidateNested({
    each: true,
  })
  @Type(() => SaveProgressReportIssueEvaluationItemDto)
  evaluations!: SaveProgressReportIssueEvaluationItemDto[];
}
