// @flow

export function slackAuth(
  state: string,
  scopes: string[] = [
    "identity.email",
    "identity.basic",
    "identity.avatar",
    "identity.team",
  ],
  clientId: string = process.env.SLACK_KEY,
  redirectUri: string = `${process.env.URL}/auth/slack.callback`
): string {
  const baseUrl = "https://slack.com/oauth/authorize";
  const params = {
    client_id: clientId,
    scope: scopes ? scopes.join(" ") : "",
    redirect_uri: redirectUri,
    state,
  };

  const urlParams = Object.keys(params)
    .map((key) => `${key}=${encodeURIComponent(params[key])}`)
    .join("&");

  return `${baseUrl}?${urlParams}`;
}

export function githubUrl(): string {
  return "https://www.github.com/outline";
}

export function githubIssuesUrl(): string {
  return "https://www.github.com/outline/outline/issues";
}

export function twitterUrl(): string {
  return "https://twitter.com/outlinewiki";
}

export function mailToUrl(): string {
  return "mailto:hello@getoutline.com";
}

export function developers(): string {
  return `https://www.getoutline.com/developers`;
}

export function changelog(): string {
  return `https://www.getoutline.com/changelog`;
}

export function signin(service: string = "slack"): string {
  return `${process.env.URL}/auth/${service}`;
}

export function settings(): string {
  return `/settings`;
}

export function groupSettings(): string {
  return `/settings/groups`;
}
