import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsInt, IsOptional, IsString, IsUUID, MaxLength, Min } from 'class-validator';

const ROLES = ['LINE_STAFF', 'DIRECTOR', 'CEO'] as const;

export class CreateApprovalRuleDto {
  @ApiProperty({ description: 'True = Director+CEO chain; False = LineStaff+Director chain' })
  @IsBoolean()
  requiresDirectorApproval!: boolean;

  @ApiPropertyOptional({ description: 'Step sequence number (auto-assigned if omitted)', minimum: 1 })
  @IsOptional()
  @IsInt()
  @Min(1)
  stepOrder?: number;

  @ApiPropertyOptional({ description: 'Insert after this step ID within the same chain' })
  @IsOptional()
  @IsUUID('4')
  insertAfterId?: string;

  @ApiProperty({ enum: ROLES, description: 'Role required to action this step' })
  @IsString()
  @MaxLength(30)
  requiredRole!: string;

  @ApiProperty({ description: 'Label shown in UI, e.g. "Review & Approve"', maxLength: 50 })
  @IsString()
  @MaxLength(50)
  actionLabel!: string;

  @ApiPropertyOptional({ enum: ROLES, description: 'Role explicitly blocked from actioning this step' })
  @IsOptional()
  @IsString()
  @MaxLength(30)
  blocksRole?: string;
}
