/**
 * @file track.js
 */
從 '../utils/guid.js' 導入 * 作為 Guid;
從 '../event-target' 導入 EventTarget;

/**
 * 包含 {@link AudioTrack} 的所有常用功能的 Track 類,
 * {@link VideoTrack} 和 {@link TextTrack}。
 *
 * > 注意:不應直接使用此類
 *
 * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html}
 * @extends 事件目標
 * @抽象的
 */
類 Track 擴展 EventTarget {

  /**
   * 創建此類的一個實例。
   *
   * @param {對象} [選項={}]
   * 選項名稱和值的對象
   *
   * @param {string} [options.kind='']
   * 您正在創建的軌道類型的有效種類。
   *
   * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
   * 此 AudioTrack 的唯一 ID。
   *
   * @param {string} [options.label='']
   * 此軌道的菜單標籤。
   *
   * @param {string} [options.language='']
   * 有效的雙字符語言代碼。
   *
   * @抽象的
   */
  構造函數(選項={}){
    極好的();

    const trackProps = {
      id: options.id || 'vjs_track_' + Guid.newGUID(),
      種類:options.kind || '',
      語言:options.language || ''
    };

    讓標籤=選項。標籤|| '';

    /**
     * @memberof 軌道
     * @member {string} id
     * 該曲目的 ID。創建後無法更改。
     * @實例
     *
     * @只讀
     */

    /**
     * @memberof 軌道
     * @member {string} 種類
     * 這是那種曲目。創建後無法更改。
     * @實例
     *
     * @只讀
     */

    /**
     * @memberof 軌道
     * @member {string} 語言
     * 此軌道的兩個字母語言代碼。之後無法更改
     * 創作。
     * @實例
     *
     * @只讀
     */

    對於(trackProps 中的常量鍵){
      Object.defineProperty(這個,鍵,{
        得到() {
          返回 trackProps[key];
        },
        放() {}
      });
    }

    /**
     * @memberof 軌道
     * @member {string} 標籤
     * 此軌道的標籤。創建後無法更改。
     * @實例
     *
     * @fires Track#labelchange
     */
    Object.defineProperty(this, 'label', {
      得到() {
        退貨標籤;
      },
      設置(新標籤){
        如果(新標籤!==標籤){
          標籤=新標籤;

          /**
           * 在此軌道上更改標籤時觸發的事件。
           *
           * > 注意:這不是規範的一部分!
           *
           * @event Track#labelchange
           * @type {EventTarget~Event}
           */
          this.trigger('labelchange');
        }
      }
    });
  }
}

導出默認軌道;