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

/**
 * 마임타입
 *
 * @see https://www.iana.org/assignments/media-types/media-types.xhtml
 * @typedef Mimetypes~종류
 * @enum
 */
내보내기 const MimetypesKind = {
  opus: '비디오/ogg',
  ogv: '비디오/ogg',
  mp4: '비디오/mp4',
  mov: '비디오/mp4',
  m4v: '비디오/mp4',
  mkv: '비디오/x-마트로스카',
  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: '이미지/웹'
};

/**
 * 가능한 경우 주어진 src URL의 mimetype을 가져옵니다.
 *
 * @param {문자열} 소스
 * src에 대한 URL
 *
 * @return {문자열}
 * 알려진 경우 mimetype을 반환하고 그렇지 않으면 빈 문자열을 반환합니다.
 */
내보내기 const getMimetype = function(src = '') {
  const ext = Url.getFileExtension(src);
  const mimetype = MimetypesKind[ext.toLowerCase()];

  반환 mimetype || '';
};

/**
 * 가능한 경우 주어진 소스 문자열의 MIME 유형을 찾으십시오. 플레이어를 사용합니다
 * 소스 캐시.
 *
 * @param {플레이어} 플레이어
 * 플레이어 개체
 *
 * @param {문자열} 소스
 * 소스 문자열
 *
 * @return {문자열}
 * 찾은 유형
 */
내보내기 const findMimetype = (플레이어, src) => {
  if (!src) {
    반품 '';
  }

  // 1. `source` 캐시에서 유형을 확인합니다.
  if (player.cache_.source.src === src && player.cache_.source.type) {
    return player.cache_.source.type;
  }

  // 2. `currentSources` 캐시에 이 소스가 있는지 확인합니다.
  const matchingSources = player.cache_.sources.filter((s) => s.src === src);

  if (matchingSources.length) {
    return matchingSources[0].type;
  }

  // 3. 소스 요소에서 src url을 찾고 거기에 있는 유형을 사용합니다.
  const sources = player.$$('source');

  에 대한 (하자 i = 0; i < 출처.길이; i++) {
    const s = 소스[i];

    만약 (s.type && s.src && s.src === src) {
      반환 s.type;
    }
  }

  // 4. 마지막으로 src url 확장자를 기반으로 하는 mime 유형 목록으로 폴백합니다.
  return getMimetype(src);
};