const {
  fetcher,
  core,
  wiki,
  musicInfo,
  modules,
  version,
  initlog,
  init,
} = require("../libpoketube-initsys.js");
const {
  IsJsonString,
  convert,
  getFirstLine,
  capitalizeFirstLetter,
  turntomins,
  getRandomInt,
  getRandomArbitrary,
} = require("../ptutils/libpt-coreutils.js");

const sha384 = modules.hash;

function getJson(str) {
  try {
    return JSON.parse(str);
  } catch {
    return null;
  }
}

module.exports = function (app, config, renderTemplate) {
  app.get("/app", async function (req, res) {
    let tab = "";
    if (req.query.tab) {
      tab = `/?type=${capitalizeFirstLetter(req.query.tab)}`;
    }

    const invtrend = await modules.fetch(
      `https://invid-api.poketube.fun/api/v1/trending${tab}`
    );
    const t = getJson(await invtrend.text());

    let j = null;
    if (req.query.mobilesearch) {
      const query = req.query.mobilesearch;
      const continuation = req.query.continuation || "";
      const search = await modules.fetch(
        `https://inner-api.poketube.fun/api/search?query=${query}&continuation=${continuation}`
      );
      const text = await search.text();
      j = getJson(modules.toJson(text));
    }

    renderTemplate(res, req, "main.ejs", {
      tab: req.query.tab,
      isMobile: req.useragent.isMobile,
      mobilesearch: req.query.mobilesearch,
      inv: t,
      turntomins,
      continuation: req.query.continuation,
      j,
    });
  });
  
app.get("/:v*?", async function (req, res) {
  const uaos = req.useragent.os;
  const browser = req.useragent.browser;
  const isOldWindows = (uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox";

  const rendermainpage = () => {
    if (req.useragent.isMobile) {
      return res.redirect("/discover");
    }

    return renderTemplate(res, req, "landing.ejs", {
      isOldWindows,
    });
  };

  if (req.params.v && /[a-zA-Z0-9]+/.test(req.params.v)) {
    const isvld = await core.isvalidvideo(req.params.v);
    if (isvld) {
      return res.redirect(`/watch?v=${req.params.v}`);
    }
  }

  return rendermainpage();
});

};