import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsEmail, IsIn, IsObject, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator';

export class CreateLeadDto {
  @ApiProperty({ example: 'Juan Pérez' })
  @IsString()
  @MaxLength(150)
  nombre: string;

  @ApiPropertyOptional({ example: 'Ferretería Central SA' })
  @IsOptional()
  @IsString()
  @MaxLength(150)
  empresa_nombre?: string;

  @ApiPropertyOptional({ example: '80012345', description: 'RUC sin DV.' })
  @IsOptional()
  @IsString()
  @MaxLength(8)
  ruc?: string;

  @ApiPropertyOptional({ example: '6' })
  @IsOptional()
  @IsString()
  @MaxLength(1)
  dv?: string;

  @ApiPropertyOptional({
    example: '0981123456',
    description: 'Se normaliza a E.164 antes de guardar. Acepta 0981…, +595981…, 595981…',
  })
  @IsOptional()
  @IsString()
  @MaxLength(25)
  telefono?: string;

  @ApiPropertyOptional({ example: 'juan@ferreteria.com.py' })
  @IsOptional()
  @IsEmail({}, { message: 'El email no tiene un formato válido' })
  @MaxLength(120)
  email?: string;

  @ApiPropertyOptional({ description: 'Origen del catálogo (crm_origenes).' })
  @IsOptional()
  @IsUUID()
  origen_id?: string;

  @ApiPropertyOptional({ example: 'Día de la Madre 2026' })
  @IsOptional()
  @IsString()
  @MaxLength(100)
  campana?: string;

  @ApiPropertyOptional({ example: { utm_source: 'facebook', utm_medium: 'cpc' } })
  @IsOptional()
  @IsObject()
  utm?: Record<string, unknown>;

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

  @ApiPropertyOptional({ description: 'Vendedor asignado. Si se omite, se asigna solo.' })
  @IsOptional()
  @IsUUID()
  asignado_a?: string;

  @ApiPropertyOptional({ enum: ['nuevo', 'contactado', 'calificado'] })
  @IsOptional()
  @IsIn(['nuevo', 'contactado', 'calificado'])
  estado?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsObject()
  datos_extra?: Record<string, unknown>;
}
