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;
}
