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

export class CreateEtapaDto {
  @ApiProperty({ example: 'Negociación' })
  @IsString()
  @IsNotEmpty()
  @MaxLength(100)
  nombre: string;

  @ApiPropertyOptional({ example: 70, description: 'Peso de la etapa en el forecast ponderado.' })
  @IsOptional()
  @IsInt()
  @Min(0)
  @Max(100)
  probabilidad?: number;

  @ApiPropertyOptional({
    example: ['condicion_pago_id', 'fecha_cierre_estimada'],
    description: 'Campos que la oportunidad debe tener cargados para ENTRAR a esta etapa.',
  })
  @IsOptional()
  @IsArray()
  @ArrayUnique()
  @IsString({ each: true })
  campos_obligatorios?: string[];

  @ApiPropertyOptional({
    example: 3,
    description: 'Días sin actividad tras los que la tarjeta se marca estancada. Omitir = no vence.',
  })
  @IsOptional()
  @IsInt()
  @Min(1)
  dias_estancamiento?: number;

  @ApiPropertyOptional({
    example: false,
    description: 'Etapa de cierre ganado. Sólo una por pipeline, y entrar exige el asistente de cierre.',
  })
  @IsOptional()
  @IsBoolean()
  es_ganada?: boolean;

  @ApiPropertyOptional({ example: false, description: 'Etapa de cierre perdido. Sólo una por pipeline.' })
  @IsOptional()
  @IsBoolean()
  es_perdida?: boolean;

  @ApiPropertyOptional({ example: 0 })
  @IsOptional()
  @IsInt()
  @Min(0)
  orden?: number;
}
