#!/usr/bin/env sh
# devist installer
#
# Usage:
#   curl -fsSL https://raw.githubusercontent.com/WebchemistCorp/devist/main/scripts/install.sh | sh
#   curl -fsSL https://raw.githubusercontent.com/WebchemistCorp/devist/main/scripts/install.sh | DEVIST_VERSION=v0.1.0 sh

set -e

REPO="WebchemistCorp/devist"
VERSION="${DEVIST_VERSION:-latest}"
INSTALL_DIR="${DEVIST_INSTALL_DIR:-$HOME/.local/bin}"

# ----- detect platform -----------------------------------------------------
OS="$(uname -s)"
ARCH="$(uname -m)"

case "$OS" in
    Linux)   OS_KEY="unknown-linux-gnu" ;;
    Darwin)  OS_KEY="apple-darwin" ;;
    *)       echo "Unsupported OS: $OS"; exit 1 ;;
esac

case "$ARCH" in
    x86_64|amd64)   ARCH_KEY="x86_64" ;;
    arm64|aarch64)  ARCH_KEY="aarch64" ;;
    *)              echo "Unsupported architecture: $ARCH"; exit 1 ;;
esac

TARGET="${ARCH_KEY}-${OS_KEY}"
ARCHIVE="devist-${TARGET}.tar.gz"

# ----- resolve version -----------------------------------------------------
if [ "$VERSION" = "latest" ]; then
    VERSION_URL="https://api.github.com/repos/${REPO}/releases/latest"
    VERSION="$(curl -fsSL "$VERSION_URL" | grep '"tag_name"' | head -n1 | sed -E 's/.*"([^"]+)".*/\1/')"
    if [ -z "$VERSION" ]; then
        echo "Failed to resolve latest version. Try setting DEVIST_VERSION explicitly."
        exit 1
    fi
fi

DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${ARCHIVE}"
SHA_URL="${DOWNLOAD_URL}.sha256"

echo "devist installer"
echo "  version : $VERSION"
echo "  target  : $TARGET"
echo "  install : $INSTALL_DIR"
echo ""

# ----- download ------------------------------------------------------------
TMPDIR="$(mktemp -d)"
trap 'rm -rf "$TMPDIR"' EXIT

echo "Downloading $ARCHIVE..."
if ! curl -fsSL -o "$TMPDIR/$ARCHIVE" "$DOWNLOAD_URL"; then
    echo "Failed to download: $DOWNLOAD_URL"
    exit 1
fi

# Verify checksum (best-effort; some releases may not include .sha256)
if curl -fsSL -o "$TMPDIR/$ARCHIVE.sha256" "$SHA_URL" 2>/dev/null; then
    echo "Verifying checksum..."
    EXPECTED="$(awk '{print $1}' "$TMPDIR/$ARCHIVE.sha256")"
    ACTUAL="$(shasum -a 256 "$TMPDIR/$ARCHIVE" | awk '{print $1}')"
    if [ "$EXPECTED" != "$ACTUAL" ]; then
        echo "Checksum mismatch."
        echo "  expected: $EXPECTED"
        echo "  actual:   $ACTUAL"
        exit 1
    fi
fi

# ----- extract & install ---------------------------------------------------
mkdir -p "$INSTALL_DIR"
tar -xzf "$TMPDIR/$ARCHIVE" -C "$TMPDIR"
mv "$TMPDIR/devist" "$INSTALL_DIR/devist"
chmod +x "$INSTALL_DIR/devist"

echo ""
echo "Installed: $INSTALL_DIR/devist"

# ----- PATH check ----------------------------------------------------------
case ":$PATH:" in
    *":$INSTALL_DIR:"*)
        echo "PATH already includes $INSTALL_DIR"
        ;;
    *)
        echo ""
        echo "Add to your shell config:"
        echo "  export PATH=\"$INSTALL_DIR:\$PATH\""
        ;;
esac

echo ""
echo "Run: devist --help"
