// Construcción de URLs de ImageKit para los assets de "Entre Líneas". // // El campo `image` que devuelve Typesense ya viene con la subruta completa // dentro del bucket, incluyendo extensión (ej. // "5171cd64-4b42-4e6d-a081-3703efbe7d43.jpeg"). Aquí sólo lo combinamos con // la base pública de ImageKit y le añadimos el preset de transformación // según el contexto (lista, detalle, fullscreen). // // Mismo patrón que `getAssetUrl` del cliente Directus: una sola fuente de // verdad para la URL, todos los componentes leen de aquí. /** Base pública de ImageKit donde están alojadas las imágenes de Entre Líneas. * Si cambia la cuenta o el folder, sólo hay que tocar esta constante. */ const IMAGEKIT_BASE = 'https://images.carpa.com/entrelineas' /** * Transforms de ImageKit por contexto. Los anchos cuentan con high-DPI: * un container de 320 px CSS necesita ~640 px reales en pantallas 2x, * por eso `detail` pide 1800 px. Quality 80–90 es el sweet spot: * notablemente más nítido que 60 con poco aumento de peso. */ const IMAGE_PRESETS = { thumb: 'tr=w-600,q-80', // miniaturas en lista de resultados detail: 'tr=w-1800,q-90', // imagen principal del panel de detalle full: 'tr=q-95' // sin resize, máxima calidad (zoom / lightbox) } as const export type EntrelineaImagePreset = keyof typeof IMAGE_PRESETS /** * Construye la URL de ImageKit para una imagen de entrelínea. * * - `image` es el valor del campo `image` de Typesense, ya con extensión * incluida (ej. "5171cd64-4b42-4e6d-a081-3703efbe7d43.jpeg"). Se concatena * tal cual a la base. * - `preset` es el preset de transformación a aplicar (default: `detail`). * * Devuelve `null` si no hay imagen para no romper la UI; los componentes * deben mostrar placeholder en ese caso. * * Ejemplo: * getEntrelineaImageUrl('5171cd64-...jpeg') * → 'https://images.carpa.com/entrelineas/5171cd64-...jpeg?tr=w-1800,q-90' */ export function getEntrelineaImageUrl( image: string | null | undefined, preset: EntrelineaImagePreset = 'detail' ): string | null { if (!image) return null // Defensivo: por si algún día llega con barra al inicio o el base con // barra al final, evitamos doble slash en la URL final. const base = IMAGEKIT_BASE.replace(/\/+$/, '') const path = String(image).replace(/^\/+/, '') return `${base}/${path}?${IMAGE_PRESETS[preset]}` }