import { ApiPropertyOptional } from '@nestjs/swagger';
import { LoyaltyProgramType } from '@prisma/client';
import {
  IsBoolean,
  IsEnum,
  IsInt,
  IsNumber,
  IsOptional,
  IsString,
  Max,
  Min,
} from 'class-validator';

export class UpdateLoyaltyProgramDto {
  @ApiPropertyOptional({ example: 'Festive Loyalty' })
  @IsOptional()
  @IsString()
  name?: string;

  @ApiPropertyOptional({
    enum: LoyaltyProgramType,
    example: LoyaltyProgramType.INCREMENTAL,
  })
  @IsOptional()
  @IsEnum(LoyaltyProgramType)
  type?: LoyaltyProgramType;

  @ApiPropertyOptional({
    example: 7,
    description: 'Used when type=PERCENTAGE (0-100).',
  })
  @IsOptional()
  @IsNumber()
  @Min(0)
  @Max(100)
  percentageRate?: number;

  @ApiPropertyOptional({
    example: 200,
    description: 'Used when type=INCREMENTAL.',
  })
  @IsOptional()
  @IsInt()
  @Min(1)
  stepAmount?: number;

  @ApiPropertyOptional({
    example: 25,
    description: 'Used when type=INCREMENTAL.',
  })
  @IsOptional()
  @IsInt()
  @Min(1)
  pointsPerStep?: number;

  @ApiPropertyOptional({ example: true })
  @IsOptional()
  @IsBoolean()
  isActive?: boolean;
}
