/**
 * mediaService.js — Carga de imágenes para el PDF.
 * Sustituye fetchImageAsBase64 + readBlobAsDataURL definidas 2× (varapp.js y pdfcreator.js).
 *
 * ORIGEN v1: mismas 2 funciones copiadas en ambos ficheros.
 * PROBLEMA: divergencia silenciosa ante cualquier cambio.
 */

import { PATHS } from '../config.js';

/**
 * Descarga una imagen del servidor y la devuelve como data URL (base64).
 * @param {string} filename — nombre de fichero (ej: "111flex_ext_codo_palo.jpg")
 * @returns {Promise<string|null>}
 */
export async function fetchImageAsBase64(filename) {
  try {
    const url = `${PATHS.getImage}?image_name=${encodeURIComponent(filename)}`;
    const response = await fetch(url);
    if (!response.ok) throw new Error(`HTTP ${response.status} — ${filename}`);
    const blob = await response.blob();
    return await blobToDataURL(blob);
  } catch (err) {
    console.error('[mediaService] fetchImageAsBase64:', err);
    return null;
  }
}

function blobToDataURL(blob) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.onerror   = reject;
    reader.readAsDataURL(blob);
  });
}

/**
 * Carga un fichero .txt del servidor y extrae la URL que contiene.
 * Usado para ejercicios con código de 3 dígitos que empieza por 9 (vídeo externo).
 * @returns {Promise<string|null>} — URL extraída o null si inválida
 */
export async function fetchExternalVideoUrl(txtUrl) {
  try {
    const response = await fetch(txtUrl);
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    const text = (await response.text()).trim();
    return isValidUrl(text) ? text : null;
  } catch (err) {
    console.error('[mediaService] fetchExternalVideoUrl:', err);
    return null;
  }
}

export function isValidUrl(url) {
  return /^(https?):\/\/[^\s/$.?#].[^\s]*$/i.test(url);
}
