import { ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { ArrayMinSize, IsArray, IsBoolean, IsIn, IsOptional, IsString, IsUUID, ValidateNested } from 'class-validator';

export class MapeoTipoGastoItemDto {
  @ApiPropertyOptional({ description: 'Texto original de la columna "TIPO CUENTA CONTABLE- GASTO"' })
  @IsString()
  tipo_gasto_texto: string;

  @ApiPropertyOptional({ enum: ['MAPEAR', 'OMITIR'] })
  @IsIn(['MAPEAR', 'OMITIR'])
  accion: 'MAPEAR' | 'OMITIR';

  @ApiPropertyOptional({ description: 'Obligatorio si accion=MAPEAR' })
  @IsOptional()
  @IsUUID()
  tipo_gasto_id?: string;

  @ApiPropertyOptional({ description: 'Si es true, se guarda como alias de la empresa para próximas importaciones' })
  @IsOptional()
  @IsBoolean()
  recordar?: boolean;
}

export class GuardarMapeoDto {
  @ApiPropertyOptional({ type: [MapeoTipoGastoItemDto] })
  @IsArray()
  @ArrayMinSize(1)
  @ValidateNested({ each: true })
  @Type(() => MapeoTipoGastoItemDto)
  mapeos: MapeoTipoGastoItemDto[];

  @ApiPropertyOptional({ description: 'Sucursal a usar para todos los gastos del archivo (opcional)' })
  @IsOptional()
  @IsUUID()
  sucursal_id?: string;
}

export class CrearAliasTipoGastoDto {
  @IsString()
  texto_origen: string;

  @IsIn(['MAPEAR', 'OMITIR'])
  accion: 'MAPEAR' | 'OMITIR';

  @IsOptional()
  @IsUUID()
  tipo_gasto_id?: string;
}

export class ConfirmarImportacionDto {
  @ApiPropertyOptional({
    description:
      'Comprobantes históricos (ya pagados y contabilizados en el sistema anterior): sólo van al Libro IVA y ' +
      'a Marangatu, sin medio de pago, asiento, cuenta a pagar ni movimiento de tesorería.',
  })
  @IsOptional()
  @IsBoolean()
  historico?: boolean;

  @ApiPropertyOptional({
    description:
      'Medio de pago para las filas de CONTADO: el gasto pagado en el momento necesita medio para el egreso de tesorería.',
  })
  @IsOptional()
  @IsUUID()
  medio_pago_id?: string;

  @ApiPropertyOptional({ description: 'Cuenta de tesorería de la que salen los gastos de contado (si no, la regla "Pago de gasto")' })
  @IsOptional()
  @IsUUID()
  cuenta_tesoreria_id?: string;
}
