const sensemap = require("../apiHandler/opensensemap/main");
const ttnantennas = require("../apiHandler/ttnantennas/main");
const autobahn = require("../apiHandler/autobahn/main");
const libs = require("../libs/metaHandler.lib.js");

const mods = [sensemap, ttnantennas, autobahn]; // Provided by main.ts in a real env.

const jsonData = {
  filters: [
    ["tag", "webcam"],
    ["country", "DEU"],
  ],
  conjunction: "AND",
}; // Provided by request in a real env

const uMods = mods.filter(function (elm) {
  // Loops through all elements in a list and lets you decide if weather to keep 'em or not
  let amount = 0;
  for (fId in jsonData.filters) {
    // Do this is each provided filter
    const fi = jsonData.filters[fId]; // Gets the current filters name
    switch (fi[0]) {
      case "tag":
        if (jsonData.conjunction == "OR") {
          if (libs.returnTags(elm).includes(fi[1])) {
            return elm;
          } else {
            break;
          }
        } else {
          if (libs.returnTags(elm).includes(fi[1])) {
            amount++;
          }
          break;
        }
      case "country":
        if (jsonData.conjunction == "OR") {
          if (libs.returnCountries(elm).includes(fi[1])) {
            return elm;
          } else {
            break;
          }
        } else {
          if (libs.returnCountries(elm).includes(fi[1])) {
            amount++;
          }
          break;
        }
    }
  }
  if (jsonData.conjunction == "AND") {
    if (amount == jsonData.filters.length) {
      return elm;
    }
  }
});

console.log(uMods);

/**
 * This things is sorting all given modules by a JSON array.
 * You can supply the ˋfilterˋ array with a list of filters
 * They are made up of ["metaData", "metaValue"]
 * Another argument is ˋconjunctionˋ it can be either AND or OR
 * OR means that any of the given filters should apply
 * AND means that all filter HAVE to apply
 *
 * Current state
 * This things can already handle OR requests, AND requests
 * are not supported yet. I also use the /libs/metaHandler lib,
 * at least I finnaly found a usecase for that waste of space.
 *
 * This is a small prototype which will be added into /routes/api.route.js
 * at some point. But what I was doing before was almost production testing.
 * Not good. I will need to test this further and throw some edge cases at it.
 */
