/**
 * Helpers needed for showing the title of a workspace.
 */
import {AppModel} from 'app/client/models/AppModel';
import {FullUser} from 'app/common/LoginSessionAPI';
import {Workspace} from 'app/common/UserAPI';

// Render the name of a workspace.  There is a similar method in HomeLeftPane.
// Not merging since the styling of parts of the name may need to diverge.
export function workspaceName(app: AppModel, ws: Workspace) {
  const {owner, name} = getWorkspaceInfo(app, ws);
  return [name, owner ? `@${owner.name}` : ''].join(' ').trim();
}

// Get the name of the personal owner of a workspace, if it is set
// and distinct from the current user.  If the personal owner is not
// set, or is the same as the current user, the empty string is
// returned.  The personal owner will only be set for workspaces in
// the "docs" pseudo-organization, which is assembled from all the
// personal organizations the current user has access to.
export function ownerName(app: AppModel, ws: Workspace): string {
  const {owner, self} = getWorkspaceInfo(app, ws);
  return self ? '' : (owner ? owner.name : '');
}

// Information needed for showing the title of a workspace.
export interface WorkspaceInfo {
  name: string;      // user-specified workspace name (empty if should not be shown)
  owner?: FullUser;  // personal owner of workspace (if known and should be shown)
  self?: boolean;    // set if owner is current user
  isDefault?: boolean;  // set if workspace is current user's 'Home' workspace
}

// Get information needed for showing the title of a workspace.
export function getWorkspaceInfo(app: AppModel, ws: Workspace): WorkspaceInfo {
  const user = app.currentUser;
  const {name, owner} = ws;
  const isHome = name === 'Home';
  if (!user || !owner) { return {owner, name}; }
  const self = user.id === owner.id;
  const isDefault = self && isHome;
  if (ws.isSupportWorkspace) {
    // Keep workspace name for support workspaces; drop owner name.
    return {name, self, isDefault};
  }
  if (isHome && !isDefault) {
    // "Home" workspaces of other users have their names omitted, but we retain
    // the name "Home" for the current user's "Home" workspace.
    return {name: '', owner, self, isDefault};  // omit name in this case
  }
  if (self) {
    return {name, self, isDefault};
  }
  return {name, owner, self, isDefault};
}