#!/usr/bin/env bash
# Escritor único de versión + tag de un paquete del toolbox.
# Uso: scripts/release <paquete> <patch|minor|major>
set -euo pipefail

if [ "$#" -lt 2 ]; then
  echo "Uso: scripts/release <paquete> <patch|minor|major>" >&2
  exit 1
fi

PACKAGE="$1"
TYPE="$2"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
MANIFEST="$ROOT/packages/$PACKAGE/duckbrain.json"

if [ ! -f "$MANIFEST" ]; then
  echo "No existe el paquete '$PACKAGE' ($MANIFEST)" >&2
  exit 1
fi

case "$TYPE" in
  patch|minor|major) ;;
  *) echo "Incremento inválido: '$TYPE' (usa patch|minor|major)" >&2; exit 1 ;;
esac

VERSION="$(php -r '$d=json_decode(file_get_contents($argv[1]),true); echo $d["version"] ?? "";' "$MANIFEST")"
if [ -z "$VERSION" ]; then
  echo "El manifiesto no declara 'version': $MANIFEST" >&2
  exit 1
fi

NEW_VERSION="$(php -r '
$v = ltrim($argv[1], "vV");
$type = $argv[2];
$p = explode(".", preg_replace("/[-+].*/", "", $v));
$p = array_pad($p, 3, 0);
$p = array_map("intval", $p);
if ($type === "major") { $p[0]++; $p[1] = 0; $p[2] = 0; }
elseif ($type === "minor") { $p[1]++; $p[2] = 0; }
else { $p[2]++; }
echo implode(".", $p);
' "$VERSION" "$TYPE")"

php -r '
$file = $argv[1];
$data = json_decode(file_get_contents($file), true);
$data["version"] = $argv[2];
file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n");
' "$MANIFEST" "$NEW_VERSION"

TAG="$PACKAGE-v$NEW_VERSION"

git -C "$ROOT" add -- "$MANIFEST"
git -C "$ROOT" commit -q -m "release($PACKAGE): v$NEW_VERSION"
git -C "$ROOT" tag -a "$TAG" -m "release($PACKAGE): v$NEW_VERSION"

if git -C "$ROOT" remote get-url origin >/dev/null 2>&1; then
  git -C "$ROOT" push -q origin HEAD --follow-tags
fi

echo "release $PACKAGE v$NEW_VERSION ($TAG)"
