import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { ArrayMaxSize, IsArray, IsDateString, IsOptional, IsString, IsUUID, MaxLength, ValidateNested } from 'class-validator';
import { ItemOportunidadDto } from './item-oportunidad.dto';

export class CreateOportunidadDto {
  @ApiProperty({ example: 'Reposición mensual - Ferretería Central' })
  @IsString()
  @MaxLength(200)
  titulo: string;

  @ApiPropertyOptional({ description: 'Cliente ya existente. Uno de cliente_id o lead_id es obligatorio.' })
  @IsOptional()
  @IsUUID()
  cliente_id?: string;

  @ApiPropertyOptional({ description: 'Lead todavía sin convertir.' })
  @IsOptional()
  @IsUUID()
  lead_id?: string;

  @ApiPropertyOptional({ description: 'Por defecto, el pipeline marcado como default de la empresa.' })
  @IsOptional()
  @IsUUID()
  pipeline_id?: string;

  @ApiPropertyOptional({ description: 'Por defecto, la primera etapa del pipeline.' })
  @IsOptional()
  @IsUUID()
  etapa_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  vendedor_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  sucursal_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  moneda_id?: string;

  @ApiPropertyOptional({ example: '2026-11-30' })
  @IsOptional()
  @IsDateString()
  fecha_cierre_estimada?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsUUID()
  origen_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(100)
  campana?: string;

  @ApiPropertyOptional({ type: [ItemOportunidadDto] })
  @IsOptional()
  @IsArray()
  @ArrayMaxSize(200)
  @ValidateNested({ each: true })
  @Type(() => ItemOportunidadDto)
  items?: ItemOportunidadDto[];
}
