import { tracked } from "@glimmer/tracking";
import Service, { service } from "@ember/service";
import {
  configNavForPlugin,
  PLUGIN_NAV_MODE_SIDEBAR,
  PLUGIN_NAV_MODE_TOP,
} from "discourse/lib/admin-plugin-config-nav";

export default class AdminPluginNavManager extends Service {
  @service currentUser;
  @tracked currentPlugin;

  // NOTE (martin) This is a temporary solution so we know whether to
  // show the expanded header / nav on the admin plugin list or not.
  // This will be removed when all plugins follow the new "show route" pattern.
  @tracked viewingPluginsList = false;

  get currentUserUsingAdminSidebar() {
    return this.currentUser?.use_admin_sidebar;
  }

  get currentConfigNav() {
    const configNav = configNavForPlugin(this.currentPlugin.id);
    const settingsNav = {
      mode: PLUGIN_NAV_MODE_TOP,
      links: [
        {
          label: "admin.plugins.change_settings_short",
          route: "adminPlugins.show.settings",
        },
      ],
    };

    // Not all plugins have a more complex config UI and navigation,
    // in that case only the settings route will be available.
    if (!configNav) {
      return settingsNav;
    }

    // Automatically inject the settings link.
    if (
      !configNav.links.mapBy("route").includes("adminPlugins.show.settings")
    ) {
      configNav.links.unshift(settingsNav.links[0]);
    }
    return configNav;
  }

  get currentPluginDefaultRoute() {
    const currentConfigNavLinks = this.currentConfigNav.links;
    const linksExceptSettings = currentConfigNavLinks.reject(
      (link) => link.route === "adminPlugins.show.settings"
    );

    // Some plugins only have the Settings route, if so it's fine to use it as default.
    if (linksExceptSettings.length === 0) {
      return currentConfigNavLinks[0].route;
    }

    return linksExceptSettings[0].route;
  }

  get isSidebarMode() {
    return this.currentConfigNav.mode === PLUGIN_NAV_MODE_SIDEBAR;
  }

  get isTopMode() {
    return this.currentConfigNav.mode === PLUGIN_NAV_MODE_TOP;
  }
}