/**
 * @Modul Filter-Quelle
 * /
importiere {isObject} von './obj';
importiere {getMimetype} von './mimetypes';

/**
 * Herausfiltern einzelner schlechter Quellobjekte oder mehrerer Quellobjekte in einer
 * array. Verflacht auch verschachtelte Quellobjekt-Arrays zu einem 1-dimensionalen
 * array von Quellobjekten.
 *
 * @param {Tech~SourceObject|Tech~SourceObject[]} src
 *        Das zu filternde src-Objekt
 *
 * @return {Tech~SourceObject[]}
 *         Ein Array von Quellobjekten, das nur gültige Quellen enthält
 *
 * @privat
 * /
const filterSource = function(src) {
  // Array durchlaufen
  if (Array.isArray(src)) {
    let newsrc = [];

    src.forEach(function(srcobj) {
      srcobj = filterSource(srcobj);

      if (Array.isArray(srcobj)) {
        newsrc = newsrc.concat(srcobj);
      } else if (isObject(srcobj)) {
        newsrc.push(srcobj);
      }
    });

    src = newsrc;
  } else if (typeof src === 'string' && src.trim()) {
    // String in Objekt umwandeln
    src = [fixSource({src})];
  } else if (isObject(src) && typeof src.src === 'string' && src.src && src.src.trim()) {
    // src ist bereits gültig
    src = [fixSource(src)];
  } else {
    // ungültige Quelle, in ein leeres Array umwandeln
    src = [];
  }

  return src;
};

/**
 * Prüft src-Mimetyp und fügt ihn, wenn möglich, hinzu
 *
 * @param {Tech~SourceObject} src
 *        Das zu prüfende src-Objekt
 * @return {Tech~SourceObject}
 *        src Objekt mit bekanntem Typ
 * /
function fixSource(src) {
  if (!src.type) {
    const mimetype = getMimetype(src.src);

    if (mimetype) {
      src.type = mimetype;
    }
  }

  return src;
}

exportieren standard filterSource;