#!/usr/bin/env bash

set -euo pipefail

# shellcheck disable=SC1091
source "${XDG_DATA_HOME}/buddy-up/includes/utils.sh"

VERSION=${VERSION:-29.2}
APP=protoc
APPS_DIR=${XDG_DATA_HOME}/apps/releases/${APP}
VER_DIR=${APPS_DIR}/${VERSION}

main() (
	ZIP=protoc-${VERSION}-$(get_os)-$(get_arch).zip
	TMP_DIR=$(mktemp -d)
	DEST_FILE=$TMP_DIR/$ZIP
	URL=https://github.com/protocolbuffers/protobuf/releases/download/v${VERSION}/${ZIP}

	if [[ ! -d ${VER_DIR} ]]; then
		curl --output "${DEST_FILE}" --location "${URL}"
		mkdir -p "${VER_DIR}"
		unzip -o "${DEST_FILE}" -d "${VER_DIR}"
		find "${VER_DIR}" -type f -exec chmod 644 {} \;
		find "${VER_DIR}" -type d -exec chmod 755 {} \;
		find "${VER_DIR}/bin" -type f -exec chmod 755 {} \;
	fi
	rm -rfv "$TMP_DIR"

	set_current_link "${APPS_DIR}" "${VERSION}"

	apps=$(find "${APPS_DIR}/current/bin" -maxdepth 1 -type f -exec basename {} \;)
	pushd "${XDG_BIN_HOME}"
	for bin in $apps; do
		if [[ ! -s $bin ]]; then
			ln -s \
				"$(relative_path "${XDG_BIN_HOME}" "${APPS_DIR}/current/bin/${bin}")" \
				"${bin}"
		fi
	done
	popd

	pushd "${XDG_INCLUDE_HOME}"
	if [[ ! -s google ]]; then
		ln -s \
			"$(relative_path "${XDG_INCLUDE_HOME}" "${APPS_DIR}/current/include/google")" \
			google
	fi
	popd
)

get_os() (
	case $(uname -s) in
	Linux*) echo linux ;;
	Darwin*) echo osx ;;
	*)
		echo >&2 "unsupported os"
		return
		;;
	esac
)

get_arch() (
	uname -m
)

main "${@}"