/**
 * @file text-track-list-converter.js 텍스트 트랙 상태 및
 * 캡처를 기반으로 트랙을 재생성합니다.
 *
 * @module 텍스트 트랙 목록 변환기
 */

/**
 * 단일 {@link TextTrack}을 검사하고 다음과 같은 JSON 호환 자바스크립트 개체를 반환합니다.
 *는 {@link TextTrack}의 상태를 나타냅니다.
 *
 * @param {TextTrack} 트랙
 * 쿼리할 텍스트 트랙입니다.
 *
 * @return {객체}
 * TextTrack의 직렬화 가능한 자바스크립트 표현입니다.
 * @사적인
 */
const trackToJson_ = 함수(트랙) {
  const ret = [
    '종류', '라벨', '언어', 'ID',
    'inBandMetadataTrackDispatchType', '모드', 'src'
  ].reduce((acc, 소품, i) => {

    if (트랙[소품]) {
      acc[prop] = 트랙[prop];
    }

    반환 acc;
  }, {
    큐: track.cues && Array.prototype.map.call(track.cues, function(cue) {
      반환 {
        시작시간: cue.startTime,
        endTime: cue.endTime,
        텍스트: cue.text,
        id: cue.id
      };
    })
  });

  반환 ret;
};

/**
 * {@link Tech}를 검사하고 JSON 호환 자바스크립트 배열을 반환합니다.
 * 현재 구성된 모든 {@link TextTrack}의 상태. 반환 배열은 다음과 호환됩니다.
 * {@link text-track-list-converter:jsonToTextTracks}.
 *
 * @param {기술} 기술
 * 쿼리할 기술 객체
 *
 * @return {배열}
 * {@link Tech}s의 직렬화 가능한 자바스크립트 표현
 * {@link TextTrackList}.
 */
const textTracksToJson = 함수(기술) {

  const trackEls = tech.$$('트랙');

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

    if (trackEl.src) {
      json.src = trackEl.src;
    }
    반환 JSON;
  });

  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {
    return trackObjs.indexOf(트랙) === -1;
  }).map(trackToJson_));
};

/**
 * 자바스크립트 배열을 기반으로 {@link Tech}에 원격 {@link TextTrack} 세트 생성
 * 객체 {@link TextTrack} 표현.
 *
 * @param {배열} json
 * `TextTrack` 표현 객체의 배열,
 * `textTracksToJson`에 의해 생성됨.
 *
 * @param {기술} 기술
 * `Tech`는 `TextTrack`을 생성합니다.
 */
const jsonToTextTracks = 함수(json, 기술) {
  json.forEach(함수(트랙) {
    const addedTrack = tech.addRemoteTextTrack(트랙).트랙;

    만약 (!track.src && track.cues) {
      track.cues.forEach((cue) => addedTrack.addCue(cue));
    }
  });

  return tech.textTracks();
};

내보내기 기본 {textTracksToJson, jsonToTextTracks, trackToJson_};