import { ApiPropertyOptional } from "@nestjs/swagger";
import { IsBoolean, IsOptional, IsString } from "class-validator";

// Este DTO valida SOLO tipo/forma. La regla "requerido si X" (p. ej. los
// campos de WhatsApp cuando usaWhatsapp=true) vive una sola vez en
// TallerParametrosService.validarRequeridoSi, derivada del catálogo
// (Task 5) — duplicarla acá iría contra esa misma decisión.
export class ActualizarParametrosTenantDto {
  @ApiPropertyOptional({ description: "Usar facturación automática" })
  @IsOptional()
  @IsBoolean()
  usaFacturacion?: boolean;

  @ApiPropertyOptional({ description: "Validar existencias antes de facturar (reservado, sin consumidor hoy)" })
  @IsOptional()
  @IsBoolean()
  usaValidacionInventario?: boolean;

  @ApiPropertyOptional({ description: "Permitir crear productos desde el taller" })
  @IsOptional()
  @IsBoolean()
  permiteCrearProductos?: boolean;

  @ApiPropertyOptional({ description: "Permitir crear tiendas desde el taller" })
  @IsOptional()
  @IsBoolean()
  permiteCrearTiendas?: boolean;

  @ApiPropertyOptional({ description: "Enviar notificaciones por WhatsApp" })
  @IsOptional()
  @IsBoolean()
  usaWhatsapp?: boolean;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappPhoneNumberId?: string;

  @ApiPropertyOptional({ description: "Vacío = no cambiar el token ya guardado" })
  @IsOptional()
  @IsString()
  whatsappAccessToken?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappApiVersion?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappTemplateCotizacion?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappTemplateEstado?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappTemplateLanguage?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  whatsappDefaultCountryCode?: string;

  @ApiPropertyOptional({ description: "Usar fotos de la OT" })
  @IsOptional()
  @IsBoolean()
  usaFotos?: boolean;

  @ApiPropertyOptional({ description: "Usar registro de daños" })
  @IsOptional()
  @IsBoolean()
  usaDanos?: boolean;

  @ApiPropertyOptional({ description: "Usar PDF de escáner" })
  @IsOptional()
  @IsBoolean()
  usaPdfEscaner?: boolean;

  @ApiPropertyOptional({ description: "Usar campo cosas que trae" })
  @IsOptional()
  @IsBoolean()
  usaCosasTrae?: boolean;

  @ApiPropertyOptional({ description: "Usar mecánicos" })
  @IsOptional()
  @IsBoolean()
  usaMecanicos?: boolean;

  @ApiPropertyOptional({ description: "Usar firma del cliente" })
  @IsOptional()
  @IsBoolean()
  usaFirmaCliente?: boolean;

  @ApiPropertyOptional({ description: "Usar firma de recepción" })
  @IsOptional()
  @IsBoolean()
  usaFirmaRecepcion?: boolean;

  @ApiPropertyOptional({ description: "Exigir fecha de salida al entregar" })
  @IsOptional()
  @IsBoolean()
  exigeFechaSalida?: boolean;

  @ApiPropertyOptional({ description: "Una sola OT abierta por vehículo" })
  @IsOptional()
  @IsBoolean()
  unaOtPorVehiculo?: boolean;

  @ApiPropertyOptional({ description: "Bloquear venta bajo costo" })
  @IsOptional()
  @IsBoolean()
  bloqueaVentaBajoCosto?: boolean;

  @ApiPropertyOptional({
    description: "Exigir motivo al cambiar la cotización",
  })
  @IsOptional()
  @IsBoolean()
  exigeMotivoCambio?: boolean;

  @ApiPropertyOptional({ description: "Usar enlace público de cotización" })
  @IsOptional()
  @IsBoolean()
  usaLinkPublicoCotizacion?: boolean;

  @ApiPropertyOptional({ description: "Usar enlace público de estado" })
  @IsOptional()
  @IsBoolean()
  usaEstadoPublico?: boolean;

  @ApiPropertyOptional({ description: "Usar módulo Historial" })
  @IsOptional()
  @IsBoolean()
  usaHistorial?: boolean;

  @ApiPropertyOptional({ description: "Usar módulo Reportes" })
  @IsOptional()
  @IsBoolean()
  usaReportes?: boolean;

  @ApiPropertyOptional({ description: "Usar cargas masivas" })
  @IsOptional()
  @IsBoolean()
  usaCargasMasivas?: boolean;

  @ApiPropertyOptional({ description: "Mostrar bitácora de la OT" })
  @IsOptional()
  @IsBoolean()
  usaBitacora?: boolean;

  @ApiPropertyOptional({ description: "Imprimir hoja de recepción" })
  @IsOptional()
  @IsBoolean()
  imprimeRecepcion?: boolean;

  @ApiPropertyOptional({ description: "Imprimir cotización" })
  @IsOptional()
  @IsBoolean()
  imprimeCotizacion?: boolean;

  @ApiPropertyOptional({ description: "Imprimir comprobante de entrega" })
  @IsOptional()
  @IsBoolean()
  imprimeEntrega?: boolean;

  @ApiPropertyOptional({ description: "Imprimir orden interna" })
  @IsOptional()
  @IsBoolean()
  imprimeOrdenInterna?: boolean;

  @ApiPropertyOptional({ description: "Exigir pago confirmado para entregar" })
  @IsOptional()
  @IsBoolean()
  exigePagoParaEntrega?: boolean;
}
