import { IsDateString, IsIn, IsNumber, IsOptional, IsString, MaxLength, Min } from 'class-validator';

const TIPOS = ['DEBITO', 'CREDITO'];

/** Editar una línea interpretada (todos los campos opcionales). */
export class EditarMovimientoDto {
  @IsOptional()
  @IsDateString({}, { message: 'fecha debe ser YYYY-MM-DD' })
  fecha?: string;

  @IsOptional()
  @IsString()
  @MaxLength(500)
  concepto?: string;

  @IsOptional()
  @IsIn(TIPOS, { message: 'tipo debe ser DEBITO o CREDITO' })
  tipo?: string;

  @IsOptional()
  @IsNumber()
  @Min(0.01, { message: 'importe debe ser mayor a 0' })
  importe?: number;

  @IsOptional()
  @IsString()
  @MaxLength(120)
  referencia?: string | null;
}

/** Agregar manualmente una línea que el parser no detectó. */
export class CrearMovimientoDto {
  @IsIn(['PROPIO', 'BANCO'], { message: 'origen debe ser PROPIO o BANCO' })
  origen: string;

  @IsDateString({}, { message: 'fecha debe ser YYYY-MM-DD' })
  fecha: string;

  @IsString()
  @MaxLength(500)
  concepto: string;

  @IsIn(TIPOS, { message: 'tipo debe ser DEBITO o CREDITO' })
  tipo: string;

  @IsNumber()
  @Min(0.01, { message: 'importe debe ser mayor a 0' })
  importe: number;

  @IsOptional()
  @IsString()
  @MaxLength(120)
  referencia?: string;
}
