import { ajax } from "discourse/lib/ajax";
import deprecated from "discourse-common/lib/deprecated";

const keySelector = "meta[name=discourse_theme_ids]";

export function currentThemeKey() {
  // eslint-disable-next-line no-console
  if (console && console.warn && console.trace) {
    // TODO: Remove this code Jan 2019
    deprecated(
      "'currentThemeKey' is is deprecated use 'currentThemeId' instead. A theme component may require updating."
    );
  }
}

export function currentThemeIds() {
  const themeIds = [];
  const elem = _.first($(keySelector));
  if (elem) {
    elem.content.split(",").forEach(num => {
      num = parseInt(num, 10);
      if (!isNaN(num)) {
        themeIds.push(num);
      }
    });
  }
  return themeIds;
}

export function currentThemeId() {
  return currentThemeIds()[0];
}

export function setLocalTheme(ids, themeSeq) {
  ids = ids.reject(id => !id);
  if (ids && ids.length > 0) {
    $.cookie("theme_ids", `${ids.join(",")}|${themeSeq}`, {
      path: "/",
      expires: 9999
    });
  } else {
    $.removeCookie("theme_ids", { path: "/", expires: 1 });
  }
}

export function refreshCSS(node, hash, newHref) {
  let $orig = $(node);

  if ($orig.data("reloading")) {
    clearTimeout($orig.data("timeout"));
    $orig.data("copy").remove();
  }

  if (!$orig.data("orig")) {
    $orig.data("orig", node.href);
  }

  $orig.data("reloading", true);

  const orig = $(node).data("orig");

  let reloaded = $orig.clone(true);
  if (hash) {
    reloaded[0].href =
      orig + (orig.indexOf("?") >= 0 ? "&hash=" : "?hash=") + hash;
  } else {
    reloaded[0].href = newHref;
  }

  $orig.after(reloaded);

  let timeout = setTimeout(() => {
    $orig.remove();
    reloaded.data("reloading", false);
  }, 2000);

  $orig.data("timeout", timeout);
  $orig.data("copy", reloaded);
}

export function previewTheme(ids = []) {
  ids = ids.reject(id => !id);
  if (!ids.includes(currentThemeId())) {
    Discourse.set("assetVersion", "forceRefresh");

    ajax(`/themes/assets/${ids.length > 0 ? ids.join("-") : "default"}`).then(
      results => {
        const elem = _.first($(keySelector));
        if (elem) {
          elem.content = ids.join(",");
        }

        results.themes.forEach(theme => {
          const node = $(
            `link[rel=stylesheet][data-target=${theme.target}]`
          )[0];
          if (node) {
            refreshCSS(node, null, theme.new_href);
          }
        });
      }
    );
  }
}

export function listThemes(site) {
  let themes = site.get("user_themes");

  if (!themes) {
    return null;
  }

  let hasDefault = !!themes.findBy("default", true);

  let results = [];
  if (!hasDefault) {
    results.push({ name: I18n.t("themes.default_description"), id: null });
  }

  themes.forEach(t => {
    results.push({ name: t.name, id: t.theme_id });
  });

  return results.length === 0 ? null : results;
}
