//let urlMp4 = "";

async function obtenerImagenes() {
  try {
    // Realizar la solicitud al servidor para obtener la lista de archivos

    const url = servidorURL + '/php/pdf/php_img.php?t=' + new Date().getTime();
    const response = await fetch(url);

    // Verificar si la respuesta es exitosa
    if (!response.ok) {
      throw new Error('Error al obtener la lista de archivos.');
    }
    // Parsear la respuesta JSON
    const data = await response.json();
    //console.info(data)
    // Verificar si hay un error en los datos recibidos
    if (data.error) {
      throw new Error(data.error);
    }
    // Almacenar la respuesta en una variable
    const files = data.files; //JSON.stringify(data, null, 2); //data.files;
    //console.info(files)
    ////////////////////////////////////////
    // Array con nombres de las imágenes
    const imagenesArray = files;

    // Objeto donde se almacenarán las imágenes clasificadas
    const imagenes = {};

    // Función para agregar imagen a la estructura de datos
    function agregarImagen(categoria, segmento, tipo, nombreImagen) {
      if (!imagenes[categoria]) imagenes[categoria] = {};
      if (!imagenes[categoria][segmento]) imagenes[categoria][segmento] = {};
      if (!imagenes[categoria][segmento][tipo]) imagenes[categoria][segmento][tipo] = [];

      imagenes[categoria][segmento][tipo].push(nombreImagen);
    }

    // Iterar sobre cada imagen y clasificarla
    imagenesArray.forEach(nombreImagen => {
      // Extraer la categoría, segmento y tipo del nombre de la imagen
      const partes = nombreImagen.split('_'); // Divide por guion bajo "_"

      const codigo = partes[0];               // Código principal (e.g., "117")
      const categoria = parseInt(codigo[0]) * 100;   // Centenas (e.g., 100, 200)
      const segmento = parseInt(codigo.slice(0, 3)); // Decenas y centenas (e.g., 110, 120, etc.)
      const tipo = parseInt(codigo[2]);              // Unidades (e.g., 1, 2, etc.)

      // Llamar a la función para agregar la imagen a la estructura
      agregarImagen(categoria, segmento, tipo, nombreImagen);
    });

    // Mostrar la estructura final
    console.log(imagenes);

    //////////////////////////////////////////
    let tmp = await toClientes(files)
    let Objeto = JSON.stringify(tmp);
    localStorage.setItem("ClaveCreator", Objeto);
    //console.info(Objeto)
  } catch (error) {
    alert("Los datos no se han cargado, cierre la pagina y vuelva a abrir la aplicación")
    console.error('Error:', error.message);
  }
}

//////////////////////////////
async function initJson() {
  let urlseg = "../app/json/categorias.json"
  categorias = await (await fetch(urlseg)).json();
  localStorage.setItem("categorias", JSON.stringify(categorias));

  let urltec = "../app/json/subcategorias.json"
  subcategorias = await (await fetch(urltec)).json();
  localStorage.setItem("subcategorias", JSON.stringify(subcategorias));
}

async function listadosImagenes() {
  try {
    // Realizar la solicitud al servidor para obtener la lista de archivos

    const url = servidorURL + '/php/pdf/php_img.php?t=' + new Date().getTime();
    //const response = await fetch('php/php_img.php?t=' + new Date().getTime());
    const response = await fetch(url);
    // Verificar si la respuesta es exitosa
    if (!response.ok) {
      throw new Error('Error al obtener la lista de archivos.');
    }
    // Parsear la respuesta JSON
    const data = await response.json();

    // Verificar si hay un error en los datos recibidos
    if (data.error) {
      throw new Error(data.error);
    }
    // Almacenar la respuesta en una variable
    const files = data.files;
    //console.info(files)
  } catch (error) {
    console.error('Error:', error.message);
  }
}

async function listadosVideos() {
  try {
    // Realizar la solicitud al servidor para obtener la lista de archivos

    const url = servidorURL + '/php/pdf/php_mp4.php?t=' + new Date().getTime();
    const response = await fetch(url);
    //const response = await fetch('php/php_mp4.php?t=' + new Date().getTime());

    // Verificar si la respuesta es exitosa
    if (!response.ok) {
      throw new Error('Error al obtener la lista de archivos.');
    }
    // Parsear la respuesta JSON
    const data = await response.json();

    // Verificar si hay un error en los datos recibidos
    if (data.error) {
      throw new Error(data.error);
    }
    // Almacenar la respuesta en una variable
    const files = data.files;
    //console.info(files)
  } catch (error) {
    console.error('Error:', error.message);
  }
}

///////////////////////////////////////////

async function toClientes(result) {
  let catalogo = JSON.parse(localStorage.getItem("catalogo")); //JSON.stringify(datoscat);
  console.info(catalogo);
  let distribucion = 'sefir';

  let clients = []
  let rutina = [];
  let datos = [];
  let pos = 0;
  let texto = ""
  let segment = JSON.parse(localStorage.getItem("categorias"));
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));

  for (let i = 0; i < catalogo.length; i++) {
    let inicio = catalogo[i].imagen; //result[i];
    //console.info(inicio);
    if (inicio && parseInt(inicio.slice(0, 3)) > 100 && inicio.length > 7) {
      let idCat = catalogo[i].id;
      /*for (let i = 0; i < result.length; i++) {
        let inicio = result[i] //result[i].name
        if (parseInt(inicio.slice(0, 3)) > 100 && inicio.length > 7) {
          //clients.push(new clientes(result[i].name))*/

      //////////////////////////////
      let nameIni = inicio;

      let name = nameIni;
      name = name.slice(0, name.indexOf("."));
      ////console.info(nameIni)

      // ojo let numero = name.slice(0, 3)
      let numeroCat = catalogo[i].cl;
      let numero = numeroCat.slice(0, 3)

      let num1 = parseInt(numero.slice(0, 1))
      let num2 = parseInt(numero.slice(0, 2))
      let num3 = parseInt(numero.slice(2, 3))

      //let orden = name.slice(0, 7)
      let orden = catalogo[i].cl; //name.slice(0, 7)
      let ordenOri = catalogo[i].codigo;

      let nivel = ""
      let seg = ""
      let tipo = ""
      let regnum = 0
      let segmnum = 0

      //let num0 = -1;
      //if (num1 == 0) num0 = 0;
      /////////////////////////////////////
      let numa = -1
      let numb = -1
      let numt = -1
      //let numa = categoriasNum.indexOf(num1 * 100);
      if (plusOptionSeg(num1 * 100)) {
        numa = numseg(num1 * 100)
        nivel = segment[numa].categorias
        regnum = segment[numa].categoriasNum
      }

      //let numb = categoriasNum.indexOf(num2 * 10);
      if (plusOptionSeg(num2 * 10)) {
        numb = numseg(num2 * 10)
        segmnum = segment[numb].categoriasNum
        seg = segment[numb].categorias
      }

      //let numt = subcategoriasNum.indexOf(num3);
      if (plusOptionTec(num3)) {
        numt = numtec(num3)
        tipo = tecnic[numt].subcategorias
      }

      let id = pos;
      let path = servidorURL + "/assets/cstimage/" + nameIni;
      //let nombre = valredux.slice(8, valredux.length) // "flex_ext_codo_palo.jpg",

      let titulo = nameIni // "111_flex_ext_codo_palo.jpg",

      let nseg = numero
      let sseg = nseg.toString()

      let namIniMp4 = nameIni.substr(0, 7)

      let exec = "";
      let videomp4 = "";
      if (parseInt(namIniMp4[2]) == 9) {
        exec = servidorURL + "/assets/cstvideo/" + namIniMp4 + ".txt"
        videomp4 = exec;
      }
      else {
        exec = servidorURL + "/assets/cstvideo/" + namIniMp4 + ".mp4"
        videomp4 = servidorURL + "/php/logs/php_log_video.php?video=" + encodeURIComponent(namIniMp4 + ".mp4") + "&dist=" + encodeURIComponent(distribucion);
      }
      let remplaza = /_+/gi;
      name = name.replace(remplaza, " ");
      let nombre = name.slice(8, name.length)
      let region = nivel //eess
      let segm = seg //"hombro",
      let radi = 0
      let activo = 1
      let menu = parseInt(numero) //120
      let memo = nivel + "/" + seg //
      let memoI = nivel + "/" + seg + "/" + tipo //"autoasistidos",
      let memoII = tipo  //"activos",
      let memoIII = tipo
      //              Ejercicio(index, codigo, grupo, subgrupo, tipo, nombre, imagen, video, descripcion, duracion, series, repeticiones) 
      let ejercicio = new Ejercicio(id, idCat, videomp4, orden, ordenOri, regnum, region, segmnum, segm, menu, memoII, nombre, path, exec, titulo, 1, 3, 10)
      clients.push(new clientesNew(id, idCat, videomp4, path, nombre, titulo, exec, orden, ordenOri, regnum, region, segmnum, segm, radi, activo, menu, memo, memoI, memoII, memoIII))
      rutina.push(ejercicio);
      pos++
    }

  }
  for (let i = 0; i < clients.length; i++) {
    let dict = {}

    ////console.info(clients[i].path)
    dict['id'] = clients[i].id
    dict['idCat'] = clients[i].idCat
    dict['videomp4'] = clients[i].videomp4
    dict['path'] = clients[i].path
    dict['nombre'] = clients[i].nombre
    dict['titulo'] = clients[i].titulo
    dict['exec'] = clients[i].exec
    dict['orden'] = clients[i].orden
    dict['ordenOri'] = clients[i].ordenOri
    dict['regnum'] = clients[i].regnum
    dict['region'] = clients[i].region
    dict['segmnum'] = clients[i].segmnum
    dict['segm'] = clients[i].segm
    dict['radi'] = clients[i].radi
    dict['activo'] = clients[i].activo
    dict['menu'] = clients[i].menu
    dict['memo'] = clients[i].memo
    dict['memoI'] = clients[i].memoI
    dict['memoII'] = clients[i].memoII
    dict['memoIII'] = clients[i].memoIII
    datos[i] = dict
    ////console.info(datos[i])
  }
  let textos = datos //
  return textos;
}


function clientesNew(id, idCat, videomp4, path, nombre, titulo, exec, orden, ordenOri, regnum, region, segmnum, segm, radi, activo, menu, memo, memoI, memoII, memoIII) {
  this.id = id
  this.idCat = idCat
  this.videomp4 = videomp4
  this.path = path
  this.nombre = nombre // "flex_ext_codo_palo",
  this.titulo = titulo // "111flex_ext_codo_palo.jpg",
  this.exec = exec //
  this.orden = orden
  this.ordenOri = ordenOri
  this.regnum = regnum
  this.region = region //"eess",
  this.segmnum = segmnum //"490",
  this.segm = segm //"hombro",
  this.radi = radi
  this.activo = activo
  this.menu = menu //120
  this.memo = memo //
  this.memoI = memoI //"autoasistidos",
  this.memoII = memoII  //"activos",
  this.memoIII = memoIII
}
//////////////////////////////////
function numseg(num) {
  let segment = JSON.parse(localStorage.getItem("categorias"));
  let n = segment.findIndex(numero => numero.categoriasNum === num);
  return n
}
function nameseg(num) {
  let segment = JSON.parse(localStorage.getItem("categorias"));
  let n = segment.findIndex(numero => numero.categoriasNum === num);
  //console.info(num)
  //console.info(categorias[n].categorias)
  return segment[n].categorias
}

function namegen(num) {
  let generic = JSON.parse(localStorage.getItem("genericos"));
  let n = generic.findIndex(numero => numero.genericosNum === num);
  //console.info(num)
  //console.info(categorias[n].categorias)
  return generic[n].genericos
}

/////////////////////////////////////////////
function numtec(num) {
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));
  let n = tecnic.findIndex(numero => numero.subcategoriasNum === num);
  return n
}
function nametec(num) {
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));
  let n = tecnic.findIndex(numero => numero.subcategoriasNum === num);
  ////console.info(subcategorias[n].subcategorias)
  return tecnic[n].subcategorias
}
function plusOptionTec(num) {
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));
  let n = tecnic.findIndex(numero => numero.subcategoriasNum === num);
  if (n != -1) return true
  else return false
}

function sortJSON(data, key, orden) {
  return data.sort(function (a, b) {
    let x = a[key],
      y = b[key];

    if (orden === 'asc') {
      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    }

    if (orden === 'desc') {
      return ((x > y) ? -1 : ((x < y) ? 1 : 0));
    }
  });
}

/////////

function plusOptionGen(num) {
  let generic = JSON.parse(localStorage.getItem("genericos"));
  let n = generic.findIndex(numero => numero.genericosNum === num);
  ////console.info(n)
  if (n != -1) return true
  else return false
}

function plusOptionSeg(num) {
  let segment = JSON.parse(localStorage.getItem("categorias"));
  let n = segment.findIndex(numero => numero.categoriasNum === num);
  ////console.info(n)
  if (n != -1) return true
  else return false
}
function plusOptionTec(num) {
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));
  let n = tecnic.findIndex(numero => numero.subcategoriasNum === num);
  if (n != -1) return true
  else return false
}
function numseg(num) {
  let segment = JSON.parse(localStorage.getItem("categorias"));
  let n = segment.findIndex(numero => numero.categoriasNum === num);
  return n
}
function numtec(num) {
  let tecnic = JSON.parse(localStorage.getItem("subcategorias"));
  let n = tecnic.findIndex(numero => numero.subcategoriasNum === num);
  return n
}

// Definir un objeto para representar un ejercicio
function Ejercicio(index, videomp4, codigo, grupo, gruponame, subgrupo, subgruponame, tipo, tiponame, nombre, imagen, video, descripcion, duracion, series, repeticiones) {
  this.index = index;
  this.videomp4 = videomp4;
  this.codigo = codigo;
  this.grupo = grupo;
  this.gruponame = gruponame;
  this.subgrupo = subgrupo;
  this.subgruponame = subgruponame;
  this.tipo = tipo;
  this.tiponame = tiponame;
  this.nombre = nombre;
  this.imagen = imagen;
  this.video = video;
  this.descripcion = descripcion;
  this.duracion = duracion;
  this.series = series;
  this.repeticiones = repeticiones;
}
