#!/bin/bash
set -e

# directory of this script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "Script directory: $SCRIPT_DIR"

# Check for GITEA_TOKEN_DEPLOY or GITEA_TOKEN
if [ -n "$GITEA_TOKEN_DEPLOY" ]; then
    TOKEN="$GITEA_TOKEN_DEPLOY"
elif [ -n "$GITEA_TOKEN" ]; then
    TOKEN="$GITEA_TOKEN"
else
    echo "GITEA_TOKEN_DEPLOY or GITEA_TOKEN environment variable not set!" >&2
    exit 1
fi

$SCRIPT_DIR/multibuild.sh
BUILD_DIR=$SCRIPT_DIR/build

OLD_PWD=$PWD
cd $SCRIPT_DIR


if [ ! -f "output/dropshell.amd64" ]; then
    echo "output/dropshell.amd64 not found!" >&2
    echo "Please run multibuild.sh first." >&2
    exit 1
fi

if [ ! -f "output/dropshell.arm64" ]; then
    echo "output/dropshell.arm64 not found!" >&2
    echo "Please run multibuild.sh first." >&2
    exit 1
fi

TAG=$("$SCRIPT_DIR/output/dropshell.amd64" --version)
[ -z "$TAG" ] && echo "Failed to get version from dropshell.amd64" >&2 && exit 1

echo "Publishing dropshell version $TAG"

# make sure we've commited.
git add "$SCRIPT_DIR/../" && git commit -m "dropshell release $TAG" && git push


# Find repo info from .git/config
REPO_URL=$(git config --get remote.origin.url)
if [[ ! $REPO_URL =~ gitea ]]; then
    echo "Remote origin is not a Gitea repository: $REPO_URL" >&2
    exit 1
fi

# Extract base URL, owner, and repo
# Example: https://gitea.example.com/username/reponame.git
BASE_URL=$(echo "$REPO_URL" | sed -E 's#(https?://[^/]+)/.*#\1#')
OWNER=$(echo "$REPO_URL" | sed -E 's#.*/([^/]+)/[^/]+(\.git)?$#\1#')
REPO=$(echo "$REPO_URL" | sed -E 's#.*/([^/]+)(\.git)?$#\1#')

API_URL="$BASE_URL/api/v1/repos/$OWNER/$REPO"

# Create release
RELEASE_DATA=$(cat <<EOF
{
  "tag_name": "$TAG",
  "name": "$TAG",
  "body": "dropshell release $TAG",
  "draft": false,
  "prerelease": false
}
EOF
)

RELEASE_ID=$(curl -s -X POST "$API_URL/releases" \
    -H "Content-Type: application/json" \
    -H "Authorization: token $TOKEN" \
    -d "$RELEASE_DATA" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)

if [ -z "$RELEASE_ID" ]; then
    echo "Failed to create release on Gitea." >&2
    exit 1
fi

# Upload binaries and install.sh
for FILE in dropshell.amd64 dropshell.arm64 install.sh server_autosetup.sh; do
    if [ -f "output/$FILE" ]; then
        filetoupload="output/$FILE"
    elif [ -f "../$FILE" ]; then
        filetoupload="../$FILE"
    elif [ -f "$FILE" ]; then
        filetoupload="$FILE"
    else
        echo "File $FILE not found!" >&2
        continue
    fi

    # Auto-detect content type
    ctype=$(file --mime-type -b "$filetoupload")

    curl -s -X POST "$API_URL/releases/$RELEASE_ID/assets?name=$FILE" \
        -H "Content-Type: $ctype" \
        -H "Authorization: token $TOKEN" \
        --data-binary @"$filetoupload"
    echo "Uploaded $FILE to release $TAG as $ctype."
done

echo "Published dropshell version $TAG to $REPO_URL (tag $TAG) with binaries."

cd $OLD_PWD