import DeferredRunner from "../deferredRunner";
import { v4 as uuidv4 } from 'uuid'
import {LegacySearchProperties} from "../../modules/Navigation/legacyLoggerFunctions";

const moduleName = "Navigation";
let deferredRunner: DeferredRunner;
let searchId

const wrappedMethodNames = [
  "logIngestEvent",
  "logCatalogEvent",
  "setCurrentBlock",
  "setTitle",
];

// expose each method as a wrapper that just calls the deferredRunner
const wrappedMethods = wrappedMethodNames.reduce((obj, current) => {
  obj[current] = (...args) => deferredRunner.execute(moduleName, current, args);
  return obj;
}, {});


function logSearchEvent(properties: LegacySearchProperties, isNewSearch: boolean, sendNow = false) {
    if (isNewSearch || properties.page === 1) {
        searchId = `${uuidv4()}${Date.now()}`
    }

    deferredRunner.execute(moduleName, 'logSearchEvent', [properties, searchId || Date.now().toString(), sendNow]);

    return searchId || Date.now().toString()
}

const init = (injectedDeferredRunner) => {
  deferredRunner = injectedDeferredRunner;
};

export default {
  init,
    logSearchEvent,
  ...wrappedMethods,
};
