import {
  IsInt,
  IsNotEmpty,
  IsOptional,
  IsString,
  Max,
  Min,
} from 'class-validator';

export class ScheduleWaitDto {
  @IsString()
  @IsNotEmpty()
  runId: string;

  @IsInt()
  @Min(0)
  @Max(2_592_000_000) // 30 dias em ms — teto de sanidade
  delayMs: number;

  // nodeKey do bloco de Espera — garante unicidade de jobId por nodeKey distinto
  // em fluxos com múltiplas esperas sequenciais. Para o MESMO nó re-entrado (loop),
  // o waitSeq (id do wait-log no Atlas) é necessário para evitar colisão de jobId.
  @IsOptional()
  @IsString()
  waitKey?: string;

  // Token de unicidade por entrada no bloco de Espera. Deve ser o id do wait-log
  // criado pelo Atlas (execute-flow.ts), garantindo que a mesma entrada de Espera
  // seja idempotente mas que duas entradas distintas (ex.: loop) gerem jobIds
  // diferentes. Quando ausente, o BFF usa um UUID como fallback (perde idempotência
  // no POST duplicado mas nunca colide).
  @IsOptional()
  @IsString()
  waitSeq?: string;
}
