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("/discover", async function (req, res) {
    const trends = await modules.fetch(config.tubeApi + `trending`);
    const h = await trends.text();
    const k = getJson(modules.toJson(h));

    if (req.query.tab)
      var tab = `/?type=${capitalizeFirstLetter(req.query.tab)}`;

    if (!req.query.tab) var tab = "";

    const invtrend = await modules
      .fetch(`https://inv.vern.cc/api/v1/trending${tab}`)
      .then((res) => res.text());

    const t = getJson(invtrend);

    if (req.query.mobilesearch) {
      var query = req.query.mobilesearch;
      tab = "search";
      if (req.query.continuation) {
        var continuation = req.query.continuation;
      }
      if (!req.query.continuation) {
        var continuation = "";
      }

      const search = await modules.fetch(
        `https://tube-srv.ashley143.gay/api/search?query=${query}&continuation=${continuation}`
      );

      const text = await search.text();
      var j = getJson(modules.toJson(text));
    }

    renderTemplate(res, req, "main.ejs", {
      k: k,
      tab: req.query.tab,
      isMobile: req.useragent.isMobile,
      mobilesearch: req.query.mobilesearch,
      inv: t,
      turntomins,
      continuation,
      j,
    });
  });

  app.get("/:v*?", async function (req, res) {
    let rendermainpage = () => {
      if (req.useragent.isMobile) {
        return res.redirect(`/discover`);
      } else {
        return renderTemplate(res, req, "landing.ejs");
      }
    };

    if (req.params.v) {
      if (/[a-zA-Z0-9]+/.test(req.param.v)) {
        const isvld = await core.isvalidvideo(req.params.v);

        if (isvld) {
          return res.redirect(`/watch?v=${req.params.v}`);
        } else {
          return rendermainpage();
        }
      }
    } else {
      return rendermainpage();
    }
  });
};