#!/usr/bin/env bash
set -euo pipefail

package_file="${1:-}"
root_dir="/srv/cpt-odoo"

if [[ -z "$package_file" || ! -f "$package_file" ]]; then
  echo "Usage: $0 /srv/cpt-odoo/incoming/<release>.tar.gz" >&2
  exit 2
fi

top_dir="$(tar -tzf "$package_file" | sed -n '1{s#/$##;p;}')"
release_id="${top_dir#cpt-odoo-}"
release_dir="$root_dir/releases/$release_id"
previous_release="$(readlink -f "$root_dir/current" 2>/dev/null || true)"

if [[ -e "$release_dir" ]]; then
  echo "Release already exists: $release_dir" >&2
  exit 1
fi

/usr/local/sbin/cpt-odoo-backup
install -d -m 0750 "$release_dir"
tar -xzf "$package_file" -C "$release_dir" --strip-components=1
cd "$release_dir"
sha256sum -c SHA256SUMS
bash -n deploy/install.sh deploy/control.sh deploy/backup.sh

if ./deploy/install.sh; then
  curl -fsS -o /dev/null http://127.0.0.1:8069/web/login
  printf '%s\n' "$release_id" > "$root_dir/LAST_UPDATE"
  echo "Activated $release_id"
  exit 0
fi

echo "Release failed, restoring previous application release" >&2
if [[ -n "$previous_release" && -x "$previous_release/deploy/install.sh" ]]; then
  "$previous_release/deploy/install.sh"
fi
exit 1
