#!/usr/bin/env bash
# Publie l'artefact dist/ sur la branche de déploiement lue par cPanel (Git Version Control).
#
# `.cpanel.yml` ne construit rien sur le serveur : il pose ce que la branche déployée
# contient. Or `dist/` est ignoré sur `v2/main`. Ce script fabrique donc, sans toucher ni à
# HEAD ni à la copie de travail, un commit qui contient **uniquement** `dist/` et
# `.cpanel.yml`, sur une branche dédiée que le clone du serveur suit.
#
# Usage : bash scripts/publier-artefact.sh [BRANCHE]     (défaut : v2/deploiement)
#   Prérequis : `bash scripts/assembler-artefact.sh <archive.tar.gz>` — dist/ conforme.
#   Le script ne pousse pas : il affiche la commande de push à lancer.
#
# Rappel : la V2 se pousse avec le compte GitHub `kodjo007` (jamais l'autre compte).

set -euo pipefail

RACINE="$(cd "$(dirname "$0")/.." && pwd)"
cd "$RACINE"

BRANCHE="${1:-v2/deploiement}"
DIST="$RACINE/dist"

# L'artefact doit être conforme avant publication : même vérificateur que l'assemblage,
# mêmes exigences que les garde-fous du .cpanel.yml.
bash scripts/verifier-artefact.sh "$DIST"

if [[ ! -f .cpanel.yml ]]; then
  echo "ERREUR : .cpanel.yml absent — le déploiement cPanel ne saurait rien faire." >&2
  exit 1
fi

version="$(tr -d '\n' < "$DIST/VERSION")"
commit_source="$(git rev-parse --short HEAD)"
branche_source="$(git rev-parse --abbrev-ref HEAD)"

# Index temporaire : la copie de travail et l'index du dépôt restent intacts.
INDEX_TMP="$(mktemp -u "${TMPDIR:-/tmp}/index-deploiement-XXXXXX")"
nettoyer() { rm -f "$INDEX_TMP"; }
trap nettoyer EXIT

GIT_INDEX_FILE="$INDEX_TMP" git read-tree --empty
GIT_INDEX_FILE="$INDEX_TMP" git add --force -- dist .cpanel.yml
ARBRE="$(GIT_INDEX_FILE="$INDEX_TMP" git write-tree)"

# Le commit précédent de la branche de déploiement reste le parent : l'historique des
# artefacts déployés est conservé, donc un retour arrière se fait par re-déploiement d'un
# commit antérieur, sans reconstruction (DEP-29, BE-46 AC2).
PARENT=""
if git rev-parse --verify --quiet "refs/heads/$BRANCHE" >/dev/null; then
  PARENT="refs/heads/$BRANCHE"
elif git rev-parse --verify --quiet "refs/remotes/origin/$BRANCHE" >/dev/null; then
  PARENT="refs/remotes/origin/$BRANCHE"
fi

MESSAGE="deploiement: artefact $version ($branche_source $commit_source)"
if [[ -n "$PARENT" ]]; then
  COMMIT="$(git commit-tree "$ARBRE" -p "$PARENT" -m "$MESSAGE")"
else
  COMMIT="$(git commit-tree "$ARBRE" -m "$MESSAGE")"
fi

git update-ref "refs/heads/$BRANCHE" "$COMMIT"

echo "Artefact $version publié sur la branche locale '$BRANCHE' ($(git rev-parse --short "$COMMIT"))."
echo "Contenu : $(git ls-tree -r --name-only "$COMMIT" | wc -l | tr -d ' ') fichiers (dist/ + .cpanel.yml)."
echo
echo "Pousser puis déployer :"
echo "  git push origin $BRANCHE"
echo "  cPanel → Git Version Control → dépôt de cette brique → Deploy HEAD Commit"
