#!/usr/bin/env bash
# Déballe dans dist/ l'artefact versionné produit par la CI (BE-05), prêt à publier.
#
# Usage : bash scripts/assembler-artefact.sh <chemin/zedeca-auth-<version>.tar.gz>
#
# Récupérer l'archive d'un run **vert** de `v2/main` (ou d'un tag `v*`) :
#   gh auth switch --user kodjo007
#   gh run download <id-du-run> --name zedeca-auth-<version> --dir /tmp/artefact
#
# Règle de processus BE-05/AC1 : une livraison en production ne part **que** de l'artefact
# d'un run vert. Ce script ne construit donc rien — ni `composer install`, ni cache : il
# déballe, marque la version, et vérifie.

set -euo pipefail

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

NOM_ARTEFACT="zedeca-auth"
ARCHIVE="${1:?usage: assembler-artefact.sh <archive.tar.gz>}"

if [[ ! -f "$ARCHIVE" ]]; then
  echo "ERREUR : archive '$ARCHIVE' introuvable." >&2
  exit 1
fi

NOM="$(basename "$ARCHIVE")"
case "$NOM" in
  "$NOM_ARTEFACT"-*.tar.gz) ;;
  *)
    echo "ERREUR : nom d'archive inattendu ('$NOM'). Attendu : $NOM_ARTEFACT-<version>.tar.gz — l'artefact de la CI, pas une archive quelconque." >&2
    exit 1
    ;;
esac

VERSION="${NOM#"$NOM_ARTEFACT"-}"
VERSION="${VERSION%.tar.gz}"

# La version devient un nom de dossier sur le serveur (`livraisons/<version>`). Un nom qui
# commence par un point — «..» sort d'une archive nommée `zedeca-auth-...tar.gz` — ferait
# remonter la cible d'un cran et le `rsync --delete` du .cpanel.yml emporterait toutes les
# livraisons. Même borne des deux côtés : ici et au garde-fou 5 du .cpanel.yml.
if [[ ! "$VERSION" =~ ^[A-Za-z0-9][A-Za-z0-9._-]*$ ]]; then
  echo "ERREUR : version '$VERSION' invalide — doit commencer par une lettre ou un chiffre et ne contenir que [A-Za-z0-9._-]." >&2
  exit 1
fi

DIST="$RACINE/dist"
rm -rf "$DIST"
mkdir -p "$DIST"
tar -xzf "$ARCHIVE" -C "$DIST"

# Ceinture et bretelles : la CI exclut déjà `.env*`, on ne s'en remet pas à elle (DEP-16).
find "$DIST" -maxdepth 1 -name '.env*' -exec rm -f {} +
rm -rf "$DIST/tests" "$DIST/.git" "$DIST/.github"

printf '%s\n' "$VERSION" > "$DIST/VERSION"

bash scripts/verifier-artefact.sh "$DIST"

echo "Artefact déballé dans $DIST — version $VERSION, $(find "$DIST" -type f | wc -l | tr -d ' ') fichiers."
echo "Publier ensuite : bash scripts/publier-artefact.sh"
