#!/bin/sh
# Instala a CLI eden do LUA Eden em ~/.eden/bin e confere o sha256 publicado. Precisa de Node 20 ou mais novo.
# Uso: curl -fsSL https://api.dev.eden.lua.vision/desktop/cli/instalar.sh | sh
set -eu
API="${EDEN_API:-https://api.dev.eden.lua.vision}"
DIR="${EDEN_HOME:-$HOME/.eden}/bin"
command -v node >/dev/null 2>&1 || { echo "eden: precisa do Node 20 ou mais novo (https://nodejs.org)"; exit 1; }
maior=$(node -p 'process.versions.node.split(".")[0]')
[ "$maior" -ge 20 ] || { echo "eden: o Node $maior é antigo; instale o 20 ou mais novo"; exit 1; }
mkdir -p "$DIR"
curl -fsSL "$API/desktop/cli/eden.mjs" -o "$DIR/eden.mjs.novo"
esperado=$(curl -fsSL "$API/desktop/versoes.json" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const a=JSON.parse(s).arquivos.find(x=>x.caminho==="cli/eden.mjs");process.stdout.write(a?a.sha256:"")})')
obtido=$(node -e 'const c=require("crypto"),f=require("fs");process.stdout.write(c.createHash("sha256").update(f.readFileSync(process.argv[1])).digest("hex"))' "$DIR/eden.mjs.novo")
[ -n "$esperado" ] && [ "$esperado" = "$obtido" ] || { rm -f "$DIR/eden.mjs.novo"; echo "eden: o sha256 do arquivo baixado não confere com o publicado; nada foi instalado"; exit 1; }
mv "$DIR/eden.mjs.novo" "$DIR/eden.mjs"
printf '#!/bin/sh\nexec node "%s/eden.mjs" "$@"\n' "$DIR" > "$DIR/eden"
chmod 755 "$DIR/eden" "$DIR/eden.mjs"
echo "eden instalado em $DIR/eden (sha256 $obtido)"
case ":$PATH:" in *":$DIR:"*) ;; *) echo "acrescente ao PATH: export PATH=\"$DIR:\$PATH\"" ;; esac
