import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsIn, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';

export class UpdateConfigComprasDto {
  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  habilitar_requisicion_compra?: boolean;

  @ApiPropertyOptional({
    enum: ['directo', 'requisicion_opcional', 'requisicion_obligatoria'],
  })
  @IsOptional()
  @IsString()
  @IsIn(['directo', 'requisicion_opcional', 'requisicion_obligatoria'])
  modo_flujo_compra?: 'directo' | 'requisicion_opcional' | 'requisicion_obligatoria';

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  afectar_stock_en_compra_directa?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  habilitar_orden_compra?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  habilitar_recepcion_compra?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  habilitar_matching_3_vias?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  habilitar_orden_pago?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  requiere_aprobacion?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  permite_pago_sin_aprobacion?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  generar_cxp_automatico?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  permitir_edicion_cxp?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  permitir_pago_parcial?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  usar_workflow?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  workflow_obligatorio?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsBoolean()
  aplicar_pago_al_guardar?: boolean;

  @ApiPropertyOptional({
    description: 'Si true, compras/gastos de contado no se auto-pagan: quedan como CxP pendiente para pagarse vía orden de pago',
  })
  @IsOptional()
  @IsBoolean()
  incluir_contado_en_orden_pago?: boolean;

  @IsOptional()
  @IsBoolean()
  permitir_editar_gasto_pagado?: boolean;

  @ApiPropertyOptional({ enum: ['SEMANAL', 'QUINCENAL', 'MENSUAL'], description: 'Cada cuánto paga la empresa a proveedores (columnas del plan de pagos)' })
  @IsOptional()
  @IsIn(['SEMANAL', 'QUINCENAL', 'MENSUAL'])
  plan_pagos_periodicidad?: 'SEMANAL' | 'QUINCENAL' | 'MENSUAL';

  @ApiPropertyOptional({ description: 'Periodicidad SEMANAL: día de pago (1 = lunes … 7 = domingo)' })
  @IsOptional()
  @IsInt()
  @Min(1)
  @Max(7)
  plan_pagos_dia_semana?: number;

  @ApiPropertyOptional({ description: 'Periodicidad MENSUAL: día del mes (31 = último día; si el mes es más corto, el último)' })
  @IsOptional()
  @IsInt()
  @Min(1)
  @Max(31)
  plan_pagos_dia_mes?: number;
}
