import { Type } from 'class-transformer';
import {
  IsBoolean,
  IsDateString,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  IsString,
  IsUUID,
  Min,
} from 'class-validator';

export class ImportarExtractoDto {
  @IsUUID()
  cuenta_id!: string;

  @IsOptional()
  @IsDateString()
  periodo_desde?: string;

  @IsOptional()
  @IsDateString()
  periodo_hasta?: string;

  @Type(() => Number)
  @IsNumber()
  saldo_inicial!: number;

  @Type(() => Number)
  @IsNumber()
  saldo_final!: number;

  @IsOptional()
  @IsString()
  archivo_nombre?: string;

  @IsString()
  @IsNotEmpty()
  csv_content!: string;
}

export class ImportarExtractoPdfBodyDto {
  @IsUUID()
  cuenta_id!: string;

  @IsOptional()
  @IsDateString()
  periodo_desde?: string;

  @IsOptional()
  @IsDateString()
  periodo_hasta?: string;

  @IsOptional()
  @IsString()
  saldo_inicial?: string;

  @IsOptional()
  @IsString()
  saldo_final?: string;
}

export class ConciliarLineaDto {
  @IsUUID()
  movimiento_id!: string;
}

export class CrearMovimientoDesdeLineaDto {
  @IsUUID()
  categoria_id!: string;

  @IsOptional()
  @IsString()
  descripcion?: string;
}

export class ActualizarLineaConciliacionDto {
  @IsOptional()
  @IsDateString()
  fecha?: string;

  @IsOptional()
  @Type(() => Number)
  @IsNumber()
  @Min(0)
  debito?: number;

  @IsOptional()
  @Type(() => Number)
  @IsNumber()
  @Min(0)
  credito?: number;

  @IsOptional()
  @IsString()
  descripcion?: string;
}

export class AutoConciliarExtractoDto {
  @IsOptional()
  @Type(() => Number)
  @IsNumber()
  @Min(0)
  tolerancia_dias?: number;

  @IsOptional()
  @Type(() => Number)
  @IsNumber()
  @Min(0)
  tolerancia_monto?: number;

  @IsOptional()
  @Type(() => Number)
  @IsNumber()
  @Min(0)
  diferencia_maxima?: number;

  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  auto_crear_comisiones?: boolean;

  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  auto_crear_itf?: boolean;

  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  auto_ajustar_diferencias?: boolean;

  @IsOptional()
  @Type(() => Boolean)
  @IsBoolean()
  marcar_sin_correspondencia?: boolean;
}
