import * as Url from '../utils/url.js';

/**
 * 模仿類型
 *
 * @see https://www.iana.org/assignments/media-types/media-types.xhtml
 * @typedef Mimetypes~種類
 * @枚舉
 */
導出常量 MimetypesKind = {
  opus: 'video/ogg',
  ogv: '視頻/ogg',
  mp4: '視頻/mp4',
  mov: '視頻/mp4',
  m4v: '視頻/mp4',
  mkv: '視頻/x-matroska',
  m4a: '音頻/mp4',
  mp3: '音頻/mpeg',
  aac: '音頻/aac',
  caf: '音頻/x-caf',
  flac: '音頻/flac',
  oga: '音頻/ogg',
  wav: '音頻/wav',
  m3u8: '應用程序/x-mpegURL',
  mpd: '應用程序/破折號+xml',
  jpg: '圖像/jpeg',
  jpeg: '圖像/jpeg',
  gif: '圖像/gif',
  png: '圖像/png',
  svg: '圖像/svg+xml',
  webp: '圖像/webp'
};

/**
 * 如果可能,獲取給定 src url 的 mimetype
 *
 * @param {string} 源
 * src 的 url
 *
 * @return {字符串}
 * 如果已知則返回 mimetype,否則返回空字符串
 */
export const getMimetype = function(src = '') {
  const ext = Url.getFileExtension(src);
  const mimetype = MimetypesKind[ext.toLowerCase()];

  返回 mimetype || '';
};

/**
 * 如果可能,查找給定源字符串的 mime 類型。使用播放器
 * 源緩存。
 *
 * @param {Player} 播放器
 * 玩家對象
 *
 * @param {string} 源
 * 源字符串
 *
 * @return {字符串}
 * 找到的類型
 */
export const findMimetype = (player, src) => {
  如果(!src){
    返回 '';
  }

  // 1. 檢查 `source` 緩存中的類型
  如果(player.cache_.source.src === src && player.cache_.source.type){
    返回 player.cache_.source.type;
  }

  // 2. 查看我們的 `currentSources` 緩存中是否有這個源
  const matchingSources = player.cache_.sources.filter((s) => s.src === src);

  如果(matchingSources.length){
    返回 matchingSources[0].type;
  }

  // 3. 在源元素中查找 src url 並使用那裡的類型
  const sources = player.$$('來源');

  為 (讓我 = 0; 我 < 來源. 長度; 我 ++) {
    const s = 來源[i];

    如果(s.type && s.src && s.src === src){
      返回 s.類型;
    }
  }

  // 4. 最後回退到我們基於 src url 擴展的 mime 類型列表
  返回 getMimetype(src);
};