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

/**
 * Mimetypes
 *
 * voir 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'
};

/**
 * Obtenir le mimetype d'une url src donnée si possible
 *
 * @param {string} src
 *        L'url de la source (src)
 *
 * @return {string}
 *         renvoie le mimetype s'il est connu ou une chaîne vide sinon
 */
export const getMimetype = function(src = '') {
  const ext = Url.getFileExtension(src) ;
  const mimetype = MimetypesKind[ext.toLowerCase()] ;

  return mimetype || '' ;
};

/**
 * Trouver le type de mime d'une chaîne source donnée, si possible. Utilise le lecteur
 * cache source.
 *
 * @param {Player} player
 *        L'objet joueur
 *
 * @param {string} src
 *        La chaîne source
 *
 * @return {string}
 *         Le type trouvé
 */
export const findMimetype = (player, src) => {
  if (!src) {
    retourner '' ;
  }

  // 1. vérifier le type dans le cache `source`
  if (player.cache_.source.src === src && player.cache_.source.type) {
    return player.cache_.source.type ;
  }

  // 2. voir si nous avons cette source dans notre cache `currentSources`
  const matchingSources = player.cache_.sources.filter((s) => s.src === src) ;

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

  // 3. rechercher l'url src dans les éléments source et utiliser le type à cet endroit
  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. enfin, nous nous rabattrons sur notre liste de types de mime en fonction de l'extension de l'url de la source
  return getMimetype(src) ;
};