#!/usr/bin/env bash

set -e

command:team() {
  get-args team_id
  api-get "/teams/$team_id"
}

ok:team() {
  fields=(
    name id permission members_count repos_count
  )
  report-data
}

command:teams() {
  require-auth
  get-args org
  report-list \
    "/orgs/$org/teams?per_page=PER_PAGE" \
    'name id'
}

format-entry:teams() {
  if "$raw_output"; then
    out "$3"
  else
    printf -v output_line "%2d) %-12s (ID %s)" "$1" "$2" "$3"
  fi
}

command:team-repos() {
  require-auth
  get-args team_id
  report-list \
    "/teams/$team_id/repos?per_page=PER_PAGE" \
    full_name
}

command:team-repo-add() {
  require-auth
  get-args team_id repo
  api-get "/teams/$team_id"
  local org="$(JSON.get -a "/organization/login" -)"
  if [ -n "$org" ]; then
    api-put "/teams/$team_id/repos/$org/$repo"
    msg_ok="'$org/$repo' is added to team (id) '$team_id'"
  else
    msg_fail="Couldn't find org for team '$team_id'"
    OK=1
  fi
}

command:team-members() {
  require-auth
  get-args team_id
  report-list \
    "/teams/$team_id/members?per_page=PER_PAGE" \
    login
}

command:team-new() {
  require-auth
  get-args org name perm
  [[ "$perm" =~ ^(pull|push|admin)$ ]] ||
    error "3rd param (perm) must be pull, push or admin"
  api-post "/orgs/$org/teams" "$(
    json-dump-object name "$name" permission "$perm"
  )"
  msg_ok="Added new team '$name' to org '$org'"
}

command:team-delete() {
  require-auth
  get-args team_id
  api-delete "/teams/$team_id"
  msg_ok="Deleted team (id) '$team_id'"
}

# vim: set lisp:
