const url = "https://tiger.worldline.global/";
const view = "/staff;scrollbar=true";

console.group("Athena - Departure Boards")
console.info("Initialising");


/* Get lookup data from JSON file */
let dataGlobal;

const getData = async () => {
  console.info("Loading Tiger lookup file");
  // Probably put a loading wheel here!
  const response = await fetch("./assets/tiger_codes.json");
  const data = await response.json();
  dataGlobal = data;
  return data;
};

(async () => {
  await getData();
  console.info("Lookup file loaded");
  console.info(dataGlobal);
  console.info("Initialisation complete");
  // Probably end the loading wheel here.
  console.groupEnd();
})();

/* Read Lookup textbox entry and call the gotoInfoBoard() function */
function getTextEntry() {
  console.group("Athena: function: getTextEntry()");
  console.info("Getting contents of textbox 'crs-lookup'");
  let forLookup = document.getElementById("crs-lookup").value;
  console.info("You have entered: " + forLookup.toUpperCase());
  console.info("Calling gotoInfoBoard(" + forLookup.toLowerCase() + ")");
  console.groupEnd()
  gotoInfoBoard(forLookup);
};

/* Runs basic validation of data type and then process that and finally
    redirects to Tiger using a built URL */
function gotoInfoBoard(station) {
  // Firstly start a console group for the function
  console.group("Athena: function: gotoInfoBoard(" + station.toLowerCase() + ")");

    //Determins if code is TIPLOC and if so redirects immediately
  if (station.length > 3 && station.length < 8) {
    console.info(station.length + "characters, presumed to be tiploc.");
    console.info("Redirecting to " + station + " departure board");
    window.location = url + station.toUpperCase() + view;

    //If code is CRS then process further to determine the TIPLOC then redirect
  } else if (station.length == 3) {
    console.info("CRS entered: " + station.toUpperCase() + ", required lookup");
    console.info("Finding object");
    let crs_to_find = station.toLowerCase();
    console.debug("Converted string to lower case:" + crs_to_find);
    //Check if the entered CRS exists in the lookup file
    console.info("Checking if CRS code exists in lookup data")
    let hasKey = dataGlobal.hasOwnProperty(crs_to_find);
    if (hasKey) { //If key exists then log and continue
      console.info(crs_to_find.toUpperCase() + " does exist in lookup file");
    } else { //If key does not exist then stop further processing
      console.warn(crs_to_find.toUpperCase() + "does not exist in lookup file");
      console.error(crs_to_find.toUpperCase() + " is an incorrect code or not supported.");
      alert(crs_to_find.toUpperCase() + " is not a valid or supported CRS, " +
      "please see the help section for more information");
      console.groupEnd();
      return 0;
    }
    let crs_obj = dataGlobal[crs_to_find];
    console.info("Isolating TIPLOC from Object");
    let tiploc = crs_obj['tiploc']; // crs_obj['tiploc']??
    console.info("TIPLOC: " + tiploc);
    console.info("Redirecting to " + tiploc + " departure board");
    window.location = url + tiploc.toUpperCase() + view;

    //If the code cannot be validated as CRS or TIPLOC then throw an alert and log
  } else {
    console.error("Please only enter:\n   - A 3 character CRS code,\n   - A 4-7 " +
    "character TIPLOC code.\n\nPartial codes or station names cannot be looked "+
    "up.");
    alert("Please only enter:\n   - A 3 character CRS code,\n   - A 4-7 " +
    "character TIPLOC code.\n\nPartial codes or station names cannot be looked "+
    "up.");
  }
  // Lastly close the log group at the end of the Function and return.
  console.groupEnd();
  return 0;
}
