/** Tipos compartidos del pipeline de búsqueda de imágenes (sin dependencias de Nest). */

export interface ProductoParaBuscar {
  id: string;
  cod_producto: string | null;
  descripcion: string;
  marca: string | null;
  categoria: string | null;
}

/** Salida de la normalización: qué buscar para un producto. */
export interface QueriesProducto {
  id: string;
  marca: string | null;
  modelo: string | null;
  tipo: string;
  queries: string[];
}

/** Un resultado de Serper /images (solo los campos que usamos). */
export interface ResultadoSerper {
  imageUrl: string;
  title: string;
  domain: string;
  imageWidth: number;
  imageHeight: number;
}

export interface EvaluacionVision {
  coincide: number;
  fondo_blanco: boolean;
  marca_agua: boolean;
  calidad: number;
  nota?: string;
}

export interface CandidataImagen {
  url: string;
  dominio: string;
  titulo: string;
  ancho: number;
  alto: number;
  /** Puntaje barato (dominio del fabricante, tamaño declarado) para decidir qué descargar. */
  prefiltro: number;
  buffer?: Buffer;
  /** Proporción de píxeles casi blancos en el borde (0–1). */
  bordeBlanco?: number;
  dhash?: string;
  /** Motivo por el que quedó afuera; si está seteado no sigue en el pipeline. */
  descarte?: string;
  vision?: EvaluacionVision;
  score?: number;
}

/** Parte de un mensaje multimodal para el LLM. */
export type ParteMensaje = { type: 'text'; text: string } | { type: 'image'; jpegBase64: string };
