#!/usr/bin/env bash

set -e

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

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

get_arch () (
    uname -m
)

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

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