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

/**
 * Cerrar una rendición.
 *
 * Casos:
 * - Saldo = 0 → no requiere datos extra.
 * - Saldo > 0 (empleado devuelve): elegir `tes_cuenta_id` + `medio_pago_id`
 *   destino de la devolución.
 * - Saldo < 0 (empresa reintegra):
 *   - `tipo_reintegro='INMEDIATO'` → elegir `tes_cuenta_id` + `medio_pago_id`
 *     de donde sale el pago.
 *   - `tipo_reintegro='DIFERIDO'` → NO requiere cuenta ni medio; se genera CxP
 *     al empleado.
 */
export class CerrarRendicionDto {
  @ApiProperty() @IsDateString() fecha_cierre!: string;

  @ApiPropertyOptional({ description: 'Solo si hay reintegro. INMEDIATO | DIFERIDO' })
  @IsOptional()
  @IsIn(['INMEDIATO', 'DIFERIDO'])
  tipo_reintegro?: 'INMEDIATO' | 'DIFERIDO';

  @ApiPropertyOptional() @IsOptional() @IsUUID() medio_pago_id?: string;
  @ApiPropertyOptional() @IsOptional() @IsUUID() tes_cuenta_id?: string;
  @ApiPropertyOptional() @IsOptional() @IsString() numero_operacion?: string;
  @ApiPropertyOptional() @IsOptional() @IsString() observaciones?: string;

  // Datos de cheque (si medio_pago es CHEQUE)
  @ApiPropertyOptional() @IsOptional() @IsString() numero_cheque?: string;
  @ApiPropertyOptional() @IsOptional() @IsString() banco_emisor?: string;
  @ApiPropertyOptional() @IsOptional() @IsString() titular_cheque?: string;
  @ApiPropertyOptional() @IsOptional() @IsDateString() fecha_emision_cheque?: string;
  @ApiPropertyOptional() @IsOptional() @IsDateString() fecha_vencimiento_cheque?: string;
}
