import { withPluginApi } from "discourse/lib/plugin-api";
import { ajax } from "discourse/lib/ajax";

function initialize(api) {
  const messageBus = api.container.lookup("message-bus:main");
  const currentUser = api.getCurrentUser();
  const appEvents = api.container.lookup("service:app-events");

  api.modifyClass("component:site-header", {
    didInsertElement() {
      this._super(...arguments);
      this.dispatch("header:search-context-trigger", "header");
    }
  });

  api.modifyClass("model:post", {
    toggleBookmark() {
      // if we are talking to discobot then any bookmarks should just
      // be created without reminder options, to streamline the new user
      // narrative.
      const discobotUserId = -2;
      if (this.user_id === discobotUserId && !this.bookmarked) {
        return ajax("/bookmarks", {
          type: "POST",
          data: { post_id: this.id }
        }).then(response => {
          this.setProperties({
            "topic.bookmarked": true,
            bookmarked: true,
            bookmark_id: response.id
          });
          this.appEvents.trigger("post-stream:refresh", { id: this.id });
        });
      }
      return this._super();
    }
  });

  api.attachWidgetAction("header", "headerSearchContextTrigger", function() {
    if (this.site.mobileView) {
      this.state.skipSearchContext = false;
    } else {
      this.state.contextEnabled = true;
      this.state.searchContextType = "topic";
    }
  });

  if (messageBus && currentUser) {
    messageBus.subscribe(`/new_user_narrative/tutorial_search`, () => {
      appEvents.trigger("header:search-context-trigger");
    });
  }
}

export default {
  name: "new-user-narratve",

  initialize(container) {
    const siteSettings = container.lookup("site-settings:main");
    if (siteSettings.discourse_narrative_bot_enabled)
      withPluginApi("0.8.7", initialize);
  }
};