/**
 * @file video-track-list.js
 */
從 './track-list' 導入 TrackList;

/**
 * 取消選擇所有其他已選擇的 {@link VideoTrack}。
 *
 * @param {VideoTrackList} 列表
 * 工作清單
 *
 * @param {VideoTrack} 軌道
 * 要跳過的曲目
 *
 * @私人的
 */
const disableOthers = function(list, track) {
  為 (讓我 = 0; 我 < 列出. 長度; 我 ++) {
    如果(!對象鍵(列表 [I])。長度 || 跟踪 ID === 列表 [我] .id){
      繼續;
    }
    // 啟用另一個視頻軌道,禁用它
    列表[i].selected = false;
  }
};

/**
 * 視頻的當前 {@link VideoTrack} 列表。
 *
 * @see [規範]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
 * @extends 曲目列表
 */
類 VideoTrackList 擴展 TrackList {

  /**
   * 創建此類的一個實例。
   *
   * @param {VideoTrack[]} [tracks=[]]
   * 用於實例化列表的 `VideoTrack` 列表。
   */
  構造函數(軌道= []){
    // 確保只啟用了 1 個軌道
    // 從最後一個索引到第一個索引排序
    對於(讓 i = tracks.length - 1; i >= 0; i--){
      如果(曲目[i].selected){
        禁用其他(曲目,曲目[i]);
        休息;
      }
    }

    超級(曲目);
    this.changing_ = false;

    /**
     * @member {number} VideoTrackList#selectedIndex
     * 所選 {@link VideoTrack`} 的當前索引。
     */
    Object.defineProperty(this, 'selectedIndex', {
      得到() {
        對於(讓我 = 0; 我 < 這是。長度; 我 ++){
          如果(這個[我]。選擇){
            返回我;
          }
        }
        返回-1;
      },
      放() {}
    });
  }

  /**
   * 添加一個 {@link VideoTrack} 到 `VideoTrackList`。
   *
   * @param {VideoTrack} 軌道
   * 添加到列表中的 VideoTrack
   *
   * @fires TrackList#addtrack
   */
  添加軌道(軌道){
    如果(track.selected){
      禁用其他(這,跟踪);
    }

    super.addTrack(軌道);
    // 本機曲目沒有這個
    如果(!track.addEventListener){
      返回;
    }

    track.selectedChange_ = () => {
      如果(this.changing_){
        返回;
      }
      this.changing_ = true;
      禁用其他(這,跟踪);
      this.changing_ = false;
      this.trigger('改變');
    };

    /**
     * @listens VideoTrack#selectedchange
     * @fires 曲目列表#change
     */
    track.addEventListener('selectedchange', track.selectedChange_);
  }

  removeTrack(rtrack){
    super.removeTrack(rtrack);

    如果(rtrack.removeEventListener && rtrack.selectedChange_){
      rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
      rtrack.selectedChange_ = null;
    }
  }
}

導出默認的 VideoTrackList;