import {
  ArrayNotEmpty,
  IsArray,
  IsBoolean,
  IsInt,
  IsOptional,
  IsString,
  Matches,
  Min,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';

export class CreateAhaKeyEventRuleDto {
  @IsString()
  @Matches(/^[a-z][a-z0-9_]*$/)
  key: string;

  @IsString()
  label: string;

  @IsArray()
  @ArrayNotEmpty()
  @IsString({ each: true })
  event_names: string[];

  @IsInt()
  @Min(1)
  min_count: number;

  @IsBoolean()
  required: boolean;
}

export class CreateAhaRuleVersionDto {
  @IsString()
  version: string;

  @IsString()
  label: string;

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

  @IsArray()
  @ArrayNotEmpty()
  @ValidateNested({ each: true })
  @Type(() => CreateAhaKeyEventRuleDto)
  key_events: CreateAhaKeyEventRuleDto[];

  @IsArray()
  @ArrayNotEmpty()
  @IsString({ each: true })
  allowed_key_screens: string[];

  @IsInt()
  @Min(1)
  min_distinct_key_screens: number;

  @IsInt()
  @Min(0)
  min_return_days: number;
}
