#!/usr/bin/env bash
{ set +x; } 2>/dev/null

usage() {
    cat <<EOF 1>&2
usage: $(basename $0) [-p|--private] name
EOF
    [ "$1" = "-h" ] || [ "$1" = "--help" ]; exit
}

[ "$1" = "-h" ] || [ "$1" = "--help" ] && usage "$@"

[[ $# == 0 ]] || [[ $# -gt 2 ]] && usage

[[ -z "$GITHUB_TOKEN" ]] && echo "ERROR: GITHUB_TOKEN environment variable required" 1>&2 && exit

# https://developer.github.com/v3/repos/#create

private=false
[[ $# == 2 ]] && {
    [[ $1 == "-p" ]] || [[ $1 == "--private" ]] && { private=true; shift; }
    [[ $# == 2 ]] && usage
}

owner=
repo=$1
[[ $1 == */* ]] && {
    owner="$(IFS=/;set $1;echo $1)"
    repo="$(IFS=/;set $1;echo $2)"
}
data="{\"name\":\"$repo\",\"private\":$private}"

# check if remote is org or user
# 1) check user/org registered
[[ -n "$owner" ]] && {
    url="https://github.com/$owner"
    curl -fs -o /dev/null "$url" || exit

    url="https://github.com/$owner/repo"
    curl -fs -o /dev/null "$url" && echo "SKIP: $url EXISTS" && exit
}

url="https://api.github.com/user/repos" # POST /user/repos (default)
[[ -n "$owner" ]] && curl -fs -I -o /dev/null https://api.github.com/orgs/"$owner" && {
    url="https://api.github.com/orgs/$owner/repos" # POST /orgs/:org/repos
}
tmp_output="$(mktemp)" || exit
http_code="$(curl -s -w '%{http_code}' -s -u "$GITHUB_TOKEN:x-oauth-basic" -o "$tmp_output" -d "$data" -X POST "$url" 1> /dev/null)" || exit
[[ $http_code -ge 300 ]] && { cat "$tmp_output" ; exit 1; };:
