#!/bin/sh
# Installe le CLI REA sur Debian 12+ / Ubuntu 22.04+ AMD64.
set -eu

REA_VERSION='0.6.7'
REA_URL='https://rea.com.co/downloads/rea-cli/latest/rea-cli_amd64.deb'
REA_SHA256='9d27fa45a04578d47ec1c2cbba8ae08acc719a26ac50383a80f0416b622f6725'

if [ "$(uname -s)" != 'Linux' ] || ! command -v dpkg >/dev/null 2>&1 || ! command -v apt-get >/dev/null 2>&1; then
	printf '%s\n' 'Ce script nécessite Debian ou Ubuntu sous Linux.' >&2
	exit 1
fi
if [ "$(dpkg --print-architecture)" != 'amd64' ]; then
	printf '%s\n' 'Ce paquet REA est réservé aux machines AMD64 (Intel/AMD 64 bits).' >&2
	exit 1
fi

# apt installe le paquet dans /usr/bin, déjà inclus dans le PATH Debian/Ubuntu.
# Ce PATH sert aussi lorsque le script est lancé depuis un service minimal.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
export PATH

run_as_root() {
	if [ "$(id -u)" -eq 0 ]; then
		"$@"
	else
		sudo "$@"
	fi
}
if [ "$(id -u)" -ne 0 ]; then
	if ! command -v sudo >/dev/null 2>&1; then
		printf '%s\n' 'Installez sudo ou exécutez ce script en tant que root.' >&2
		exit 1
	fi
	sudo -v
fi
if ! command -v curl >/dev/null 2>&1; then
	run_as_root apt-get update
	run_as_root apt-get install -y curl ca-certificates
fi

rea_tmpdir=$(mktemp -d /tmp/rea-cli-install.XXXXXX)
trap 'rm -rf -- "$rea_tmpdir"' EXIT HUP INT TERM
rea_package="$rea_tmpdir/rea-cli_${REA_VERSION}_amd64.deb"
printf '%s\n' "Téléchargement de REA CLI ${REA_VERSION}…"
curl --fail --location --proto '=https' --proto-redir '=https' --tlsv1.2 --retry 3 "$REA_URL" -o "$rea_package"
printf '%s  %s\n' "$REA_SHA256" "$rea_package" | sha256sum --check --status

# L'installation par apt conserve le suivi du paquet et résout ses dépendances.
# Le répertoire temporaire est lisible par l'utilisateur sandbox _apt.
chmod 755 "$rea_tmpdir"
chmod 644 "$rea_package"
run_as_root apt-get install -y --reinstall "$rea_package"
test -x /usr/bin/rea
if [ "$(/usr/bin/rea --version)" != "rea $REA_VERSION" ]; then
	printf '%s\n' 'La version installée ne correspond pas au paquet publié.' >&2
	exit 1
fi

# Une ancienne installation dans /usr/local/bin peut masquer le paquet apt.
# La sauvegarder avant de placer le lien vers le binaire officiel.
run_as_root mkdir -p /usr/local/bin
if [ -e /usr/local/bin/rea ] || [ -L /usr/local/bin/rea ]; then
	if [ "$(readlink /usr/local/bin/rea 2>/dev/null || true)" != '/usr/bin/rea' ]; then
		rea_backup="/usr/local/bin/rea.before-install-$(date -u +%Y%m%dT%H%M%SZ)-$$"
		run_as_root mv /usr/local/bin/rea "$rea_backup"
		printf '%s\n' "Ancienne installation sauvegardée : $rea_backup"
	fi
fi
run_as_root ln -sfn /usr/bin/rea /usr/local/bin/rea

printf '\n%s\n' 'REA est installé dans /usr/bin/rea et disponible avec la commande rea.'
/usr/bin/rea --version
printf '%s\n' 'Exemple de compression : rea create -o archive.rea mon-dossier/'
