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

/**
 * Mimetypes
 *
 * @see https://www.iana.org/assignments/media-types/media-types.xhtml
 * @typedef Mimetypes~Kind
 * @enum
 * /
export const MimetypesKind = {
  opus: "video/ogg",
  ogv: 'video/ogg',
  mp4: 'video/mp4',
  mov: 'video/mp4',
  m4v: 'video/mp4',
  mkv: 'video/x-matroska',
  m4a: 'audio/mp4',
  mp3: 'audio/mpeg',
  aac: 'audio/aac',
  caf: 'audio/x-caf',
  flac: 'audio/flac',
  oga: 'audio/ogg',
  wav: 'audio/wav',
  m3u8: 'application/x-mpegURL',
  mpd: 'application/dash+xml',
  jpg: 'image/jpeg',
  jpeg: 'image/jpeg',
  gif: 'image/gif',
  png: 'image/png',
  svg: 'image/svg+xml',
  webp: 'image/webp'
};

/**
 * Ermittelt den Mimetyp einer gegebenen src url, wenn möglich
 *
 * @param {string} src
 *        Die Url zum src
 *
 * @return {string}
 *         rückgabe des Mimetyps, wenn er bekannt war, sonst leere Zeichenkette
 * /
export const getMimetype = function(src = '') {
  const ext = Url.getFileExtension(src);
  const mimetype = MimetypesKind[ext.toLowerCase()];

  return mimetype || '';
};

/**
 * Findet den Mime-Typ einer gegebenen Quellzeichenkette, wenn möglich. Verwendet den Player
 * quell-Cache.
 *
 * @param {Player} Spieler
 *        Das Player-Objekt
 *
 * @param {string} src
 *        Die Quellzeichenkette
 *
 * @return {string}
 *         Der Typ, der gefunden wurde
 * /
export const findMimetype = (player, src) => {
  if (!src) {
    zurückgeben '';
  }

  // 1. Suche nach dem Typ im Cache "Quelle"
  if (player.cache_.source.src === src && player.cache_.source.type) {
    return player.cache_.source.type;
  }

  // 2. prüfen, ob diese Quelle im Cache "CurrentSources" vorhanden ist
  const matchingSources = player.cache_.sources.filter((s) => s.src === src);

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

  // 3. Suchen Sie nach der src-URL in Quellelementen und verwenden Sie den Typ dort
  const sources = player.$$('source');

  for (let i = 0; i < sources.length; i++) {
    const s = sources[i];

    if (s.type && s.src && s.src === src) {
      return s.type;
    }
  }

  // 4. schließlich Rückgriff auf unsere Liste der Mime-Typen auf der Grundlage der src-Url-Erweiterung
  return getMimetype(src);
};