# shellcheck shell=dash

___x_cmd_hub_org_member(){
    local X_help_cmd='___x_cmd_hub___help org member'
    help:arg-null:parse

    local op="$1"
    case "$op" in
        ls|add|rm) shift
            "___x_cmd_hub_org_member_$op" "$@"                 ;;
        *) ___x_cmd_hub_u_subcmd_invalid org member "$@"       ;;
    esac
}

___x_cmd_hub_org_member_ls(){
    local X_help_cmd='___x_cmd_hub___help org member ls'
    help:arg-null:parse

    local org=
    while [ $# -gt 0 ]; do
        case "$1" in
            --org)      shift; org="$1"; shift ;;
            *)          break ;;
        esac
    done

    [ -n "$org" ] || M='Please provide --org <org>"' arg:ret:64
    local resp=; resp="$(___x_cmd_hub_u_curl get "/api/v0/org/$org/member")" || {
        ___x_cmd_hub_u_handle_resp false "Failed to list members of $org"
        return 1
    }

    printf "%s" "$resp" | ___x_cmd jo
}

___x_cmd_hub_org_member_add(){
    local X_help_cmd='___x_cmd_hub___help org member add'
    help:arg-null:parse

    local org=; local user=
    while [ $# -gt 0 ]; do
        case "$1" in
            --org)      shift; org="$1"; shift ;;
            *)          break ;;
        esac
    done

    [ -n "$org" ] || M='Please provide --org <org>"' arg:ret:64
    [ $# -gt 0 ]  || M='Please provide <user>"' arg:ret:64
    user="$1"; shift

    local resp=; resp="$(___x_cmd_hub_u_curl post "/api/v0/org/$org/member" -- "username=$user")" || {
        ___x_cmd_hub_u_handle_resp false "Failed to add member '$user' to '$org'"
        return 1
    }

    ___x_cmd_hub_u_handle_resp true "Added member '$user' to '$org'"
}

___x_cmd_hub_org_member_rm(){
    local X_help_cmd='___x_cmd_hub___help org member rm'
    help:arg-null:parse

    local org=; local user=
    while [ $# -gt 0 ]; do
        case "$1" in
            --org)      shift; org="$1"; shift ;;
            *)          break ;;
        esac
    done

    [ -n "$org" ] || M='Please provide --org <org>"' arg:ret:64
    [ $# -gt 0 ]  || M='Please provide <user>"' arg:ret:64
    user="$1"; shift

    local resp; resp="$(___x_cmd_hub_u_curl delete "/api/v0/org/$org/member/$user")" || {
        ___x_cmd_hub_u_handle_resp false "Failed to remove member '$user' from '$org'"
        return 1
    }

    ___x_cmd_hub_u_handle_resp true "Removed member '$user' from '$org'"
}
