#!/usr/bin/env bash

set -euo pipefail

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

VERSION=${VERSION:-v1.47.2}
DEST=${XDG_DATA_HOME}/apps/releases/buf
CURRENT=${DEST}/current
URL=https://github.com/bufbuild/buf/releases/download/${VERSION}/buf-$(uname)-$(uname -m).tar.gz

main () (
	extract_tarball "${URL}" "${DEST}/${VERSION}" "--strip-components 1"
	set_current_link "${DEST}" "${VERSION}"

	symlink_apps
	symlink_man_pages

	set_symlink \
		"${XDG_CONFIG_HOME}/bash/bashrc.d" buf.sh \
		"${CURRENT}/etc/bash_completion.d" buf
	set_symlink "${XDG_DATA_HOME}/zsh/site-functions" _buf \
		"${CURRENT}/share/zsh/site-functions" _buf
	set_symlink "${XDG_DATA_HOME}/fish/vendor_completions.d" buf.fish \
		"${CURRENT}/share/fish/vendor_completions.d" buf.fish
)

symlink_apps () (
	APPS=$(find "${DEST}/${VERSION}/bin" -type f -exec basename {} ';')
	for APP in ${APPS}; do
		set_symlink "${XDG_BIN_HOME}" "${APP}" "${CURRENT}/bin" "${APP}"
	done
)

symlink_man_pages () (
	MANS=$(find "${DEST}/${VERSION}/share/man/man1" -type f -exec basename {} ';')
	for SHARE in ${MANS}; do
		set_symlink "${MAN_DIR}" "${SHARE}" "${CURRENT}/share/man/man1" "${SHARE}"
	done
)

set_symlink () (
	dest_dir=$1
	dest_file=$2
	src_dir=$3
	src_file=$4

	mkdir_if_missing "${dest_dir}"
	cd "${dest_dir}" || exit 1
	unlink_if_set "${dest_dir}/${dest_file}"
	ln -s "$(relative_path "${dest_dir}" "${src_dir}/${src_file}")" "${dest_file}"
	cd - > /dev/null || exit 1
)

main "$@"