/**
 * @file text-track-list-converter.js Utilidades para capturar el estado de la pista de texto y
 * recrear pistas basadas en una captura.
 *
 * @module text-track-list-converter
 * /

/**
 * Examine un solo {@link TextTrack} y devuelva un objeto javascript compatible con JSON que
 * representa el estado de {@link TextTrack}.
 *
 * @param {TextTrack} pista
 * La pista de texto a consultar.
 *
 * @return {Objeto}
 * Una representación javascript serializable de TextTrack.
 * @privado
 * /
const trackToJson_ = function(pista) {
  constante ret = [
    'tipo', 'etiqueta', 'idioma', 'id',
    'inBandMetadataTrackDispatchType', 'modo', 'origen'
  ].reduce((acc, prop, i) => {

    si (pista [accesorio]) {
      acc[prop] = track[prop];
    }

    retorno acc;
  }, {
    cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {
      regreso {
        hora de inicio: cue.hora de inicio,
        hora de finalización: cue.hora de finalización,
        texto: cue.texto,
        id: cue.id
      };
    })
  });

  volver ret;
};

/**
 * Examine un {@link Tech} y devuelva una matriz de javascript compatible con JSON que represente el
 * estado de todos los {@link TextTrack} configurados actualmente. La matriz de retorno es compatible con
 * {@link text-track-list-converter:jsonToTextTracks}.
 *
 * @param {Tecnología} tecnología
 * El objeto tecnológico a consultar
 *
 * @return {Array}
 * Una representación javascript serializable de los {@link Tech}s
 * {@enlace TextTrackList}.
 * /
const textTracksToJson = función (tecnología) {

  const trackEls = tech.$$('pista');

  const trackObjs = Array.prototype.map.call(trackEls, (t) => t.pista);
  const pistas = Array.prototype.map.call(trackEls, function(trackEl) {
    const json = trackToJson_(trackEl.track);

    if (pistaEl.src) {
      json.src = trackEl.src;
    }
    devolver json;
  });

  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {
    volver trackObjs.indexOf(pista) === -1;
  }).mapa(seguimiento aJson_));
};

/**
 * Cree un conjunto de {@link TextTrack} remotos en un {@link Tech} basado en una matriz de javascript
 * Objeto {@link TextTrack} representaciones.
 *
 * @param {Arreglo} json
 * Una matriz de objetos de representación `TextTrack`, como los que serían
 * producido por `textTracksToJson`.
 *
 * @param {Tecnología} tecnología
 * La `Tecnología` para crear `TextTrack`s.
 * /
const jsonToTextTracks = función (json, tecnología) {
  json.forEach(función(pista) {
    const addedTrack = tech.addRemoteTextTrack(track).track;

    si (!pista.src && pista.cues) {
      track.cues.forEach((cue) => pista añadida.addCue(cue));
    }
  });

  volver tech.textTracks();
};

exportar por defecto {textTracksToJson, jsonToTextTracks, trackToJson_};