#!/usr/bin/env sh
# Instalador do Shakk Code — https://shakk.com.br/code
#
# Instala o comando `shakk` num ambiente isolado do seu usuário
# (~/.local/share/shakk-code). Não usa sudo e não altera o Python do sistema.
# O pacote é baixado deste mesmo site e o SHA-256 é conferido antes de instalar.
#
# Desinstalar:  rm -rf ~/.local/share/shakk-code ~/.local/bin/shakk
set -eu

BASE_URL="https://shakk.com.br"
WHEEL="shakk_code-0.3.0-py3-none-any.whl"
WHEEL_SHA256="069b635a4effe0a4b3742972f2bb4c8a1322463d6f53b544cbd9d1f58181c899"

INSTALL_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/shakk-code"
BIN_DIR="${XDG_BIN_HOME:-$HOME/.local/bin}"

say() { printf '%s\n' "$*"; }
die() { printf 'Erro: %s\n' "$*" >&2; exit 1; }

command -v python3 >/dev/null 2>&1 || die "o Python 3.10 ou mais novo precisa estar instalado antes de continuar."
python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3, 10) else 1)' \
  || die "o Shakk Code precisa do Python 3.10 ou mais novo (encontrado: $(python3 -V 2>&1))."
python3 -c 'import venv, ensurepip' >/dev/null 2>&1 \
  || die "o módulo venv do Python não está disponível. No Debian/Ubuntu: sudo apt install python3-venv"

TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT INT TERM

say "Baixando o Shakk Code…"
if command -v curl >/dev/null 2>&1; then
  curl -fsSL "$BASE_URL/downloads/$WHEEL" -o "$TMP/$WHEEL" || die "não foi possível baixar o pacote."
elif command -v wget >/dev/null 2>&1; then
  wget -q "$BASE_URL/downloads/$WHEEL" -O "$TMP/$WHEEL" || die "não foi possível baixar o pacote."
else
  die "é preciso ter curl ou wget instalado."
fi

if command -v sha256sum >/dev/null 2>&1; then
  ACTUAL="$(sha256sum "$TMP/$WHEEL" | cut -d' ' -f1)"
elif command -v shasum >/dev/null 2>&1; then
  ACTUAL="$(shasum -a 256 "$TMP/$WHEEL" | cut -d' ' -f1)"
else
  die "não encontrei sha256sum nem shasum para conferir o pacote."
fi
[ "$ACTUAL" = "$WHEEL_SHA256" ] || die "o pacote baixado não confere com o SHA-256 esperado. Instalação cancelada."
say "Pacote conferido (SHA-256 ok)."

mkdir -p "$INSTALL_DIR" "$BIN_DIR"
python3 -m venv "$INSTALL_DIR/venv"
"$INSTALL_DIR/venv/bin/python" -m pip install --quiet --upgrade pip
"$INSTALL_DIR/venv/bin/python" -m pip install --quiet --upgrade "$TMP/$WHEEL"
ln -sf "$INSTALL_DIR/venv/bin/shakk" "$BIN_DIR/shakk"

say ""
say "Shakk Code instalado com sucesso."
say "Abra um novo terminal e execute:  shakk configurar"
case ":$PATH:" in
  *":$BIN_DIR:"*) ;;
  *) say "Se o comando não for encontrado, adicione $BIN_DIR ao seu PATH." ;;
esac
