#!/usr/bin/env bash
#
# Based upon https://hinty.io/ivictbor/publish-and-upload-release-to-github-with-bash-and-curl/
# and https://gist.github.com/stefanbuck/ce788fee19ab6eb0b4447a85fc99f447
#

set -e
# set -x

version="$1"
releasepath="$2"

github_api_token=`cat ~/githubtoken`
release_notes_file="/tmp/scrn.md"

owner=SchildiChat
repo=schildichat-desktop
target=master

# Define variables
GH_API="https://api.github.com"
GH_REPO="$GH_API/repos/$owner/$repo"
AUTH="Authorization: token $github_api_token"

# Validate token
curl -o /dev/null -sH "$AUTH" $GH_REPO || { echo "Error: Invalid repo, token or network issue!";  exit 1; }

# Get release notes
$EDITOR "$release_notes_file"
release_notes=`cat "$release_notes_file"`

# Create draft release
echo "Create GitHub draft release ..."
json_string=`jq -n --arg tag "v$version" --arg target "$target" --arg body "$release_notes" '{
  tag_name: $tag,
  target_commitish: $target,
  name: $tag,
  body: $body,
  draft: true,
  prerelease: false
}'`
# echo "$json_string"
res=`echo "$json_string" | curl -sH "$AUTH" $GH_REPO/releases -d @-`
# echo "$res" | jq "."

# Get release id
id=`echo $res | jq ".id"`
# echo "id: $id"

# Upload assets
find "$releasepath" -type f | while read filename; do
    echo ""
    echo "Uploading $filename ..."

    # Construct url
    GH_ASSET="https://uploads.github.com/repos/$owner/$repo/releases/$id/assets?name=$(basename $filename)"

    # Upload
    res=`curl --progress-bar --data-binary @"$filename" -H "$AUTH" -H "Content-Type: application/octet-stream" $GH_ASSET`
    state=`echo $res | jq ".state"`
    if [ "$state" == "\"uploaded\"" ]; then
        echo "Success!"
    else
        echo "Error:"
        echo $res | jq "."
        exit -1
    fi
done

# Publish draft
res=`curl -sH "$AUTH" $GH_REPO/releases/$id -d '{"draft": false}'`
draft=`echo $res | jq ".draft"`
echo ""
if [ "$draft" == "false" ]; then
    echo "Release v$version published on GitHub!"
else
    echo "Error:"
    echo $res | jq "."
    exit -1
fi