#!/bin/sh
# dbology installer — https://databaseology.com
# Usage: curl -fsSL https://get.databaseology.com/install.sh | sh
set -e

CDN_BASE="https://get.databaseology.com"

# ── Detect OS ─────────────────────────────────────────────────────
OS="$(uname -s)"
case "$OS" in
    Linux)   OS_NAME="linux" ;;
    Darwin)  OS_NAME="macos" ;;
    MINGW*|MSYS*|CYGWIN*)
        echo "Windows detected. Install from PowerShell with:"
        echo "  irm https://get.databaseology.com/install.ps1 | iex"
        exit 1
        ;;
    *)
        echo "Error: unsupported OS: $OS"
        exit 1
        ;;
esac

# ── Detect architecture ──────────────────────────────────────────
ARCH="$(uname -m)"
case "$ARCH" in
    x86_64|amd64)   ARCH_NAME="x64" ;;
    aarch64|arm64)   ARCH_NAME="arm64" ;;
    *)
        echo "Error: unsupported architecture: $ARCH"
        exit 1
        ;;
esac

echo "Detected: ${OS_NAME}-${ARCH_NAME}"

# ── Fetch latest version ─────────────────────────────────────────
LATEST_URL="${CDN_BASE}/releases/latest.json"
echo "Checking latest version..."

if command -v curl > /dev/null 2>&1; then
    LATEST_JSON="$(curl -fsSL "$LATEST_URL")"
elif command -v wget > /dev/null 2>&1; then
    LATEST_JSON="$(wget -qO- "$LATEST_URL")"
else
    echo "Error: curl or wget is required"
    exit 1
fi

# Parse version from JSON without jq dependency
VERSION="$(echo "$LATEST_JSON" | grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')"

if [ -z "$VERSION" ]; then
    echo "Error: could not determine latest version"
    exit 1
fi

echo "Latest version: v${VERSION}"

# ── Download binary ──────────────────────────────────────────────
BINARY_NAME="dbology-${OS_NAME}-${ARCH_NAME}"
BINARY_URL="${CDN_BASE}/releases/v${VERSION}/${BINARY_NAME}"
CHECKSUM_URL="${CDN_BASE}/releases/v${VERSION}/checksums.sha256"

TMPDIR="${TMPDIR:-/tmp}"
TMP_BINARY="${TMPDIR}/dbology-download-$$"
TMP_CHECKSUMS="${TMPDIR}/dbology-checksums-$$"

cleanup() {
    rm -f "$TMP_BINARY" "$TMP_CHECKSUMS"
}
trap cleanup EXIT

echo "Downloading dbology v${VERSION}..."

if command -v curl > /dev/null 2>&1; then
    curl -fSL -o "$TMP_BINARY" "$BINARY_URL"
    curl -fsSL -o "$TMP_CHECKSUMS" "$CHECKSUM_URL"
else
    wget -q -O "$TMP_BINARY" "$BINARY_URL"
    wget -q -O "$TMP_CHECKSUMS" "$CHECKSUM_URL"
fi

# ── Verify checksum ──────────────────────────────────────────────
echo "Verifying checksum..."

if command -v sha256sum > /dev/null 2>&1; then
    ACTUAL_HASH="$(sha256sum "$TMP_BINARY" | awk '{print $1}')"
elif command -v shasum > /dev/null 2>&1; then
    ACTUAL_HASH="$(shasum -a 256 "$TMP_BINARY" | awk '{print $1}')"
else
    echo "Warning: sha256sum/shasum not found — skipping verification"
    ACTUAL_HASH=""
fi

if [ -n "$ACTUAL_HASH" ]; then
    EXPECTED_HASH="$(grep "$BINARY_NAME" "$TMP_CHECKSUMS" | awk '{print $1}')"
    if [ -z "$EXPECTED_HASH" ]; then
        echo "Warning: no checksum found for ${BINARY_NAME} — skipping verification"
    elif [ "$ACTUAL_HASH" != "$EXPECTED_HASH" ]; then
        echo "Error: checksum mismatch!"
        echo "  Expected: ${EXPECTED_HASH}"
        echo "  Got:      ${ACTUAL_HASH}"
        exit 1
    else
        echo "Checksum verified."
    fi
fi

# ── Install ──────────────────────────────────────────────────────
INSTALL_DIR="${DBOLOGY_INSTALL_DIR:-}"

if [ -z "$INSTALL_DIR" ]; then
    if [ "$OS_NAME" = "macos" ]; then
        INSTALL_DIR="/usr/local/bin"
    else
        INSTALL_DIR="$HOME/.local/bin"
        mkdir -p "$INSTALL_DIR"
    fi
fi

INSTALL_PATH="${INSTALL_DIR}/dbology"

# Check if we need elevated permissions
if [ -w "$INSTALL_DIR" ] || [ ! -d "$INSTALL_DIR" ]; then
    chmod +x "$TMP_BINARY"
    mv "$TMP_BINARY" "$INSTALL_PATH"
else
    echo "Installing to ${INSTALL_DIR} requires elevated permissions."
    chmod +x "$TMP_BINARY"
    sudo mv "$TMP_BINARY" "$INSTALL_PATH"
fi

# ── Verify PATH ──────────────────────────────────────────────────
case ":${PATH}:" in
    *":${INSTALL_DIR}:"*) ;;
    *)
        echo ""
        echo "NOTE: ${INSTALL_DIR} is not in your PATH."
        echo "Add it by running:"
        echo ""
        SHELL_NAME="$(basename "${SHELL:-/bin/sh}")"
        case "$SHELL_NAME" in
            zsh)  echo "  echo 'export PATH=\"${INSTALL_DIR}:\$PATH\"' >> ~/.zshrc && source ~/.zshrc" ;;
            fish) echo "  fish_add_path ${INSTALL_DIR}" ;;
            *)    echo "  echo 'export PATH=\"${INSTALL_DIR}:\$PATH\"' >> ~/.bashrc && source ~/.bashrc" ;;
        esac
        echo ""
        ;;
esac

# ── Done ─────────────────────────────────────────────────────────
echo ""
echo "dbology v${VERSION} installed successfully!"
echo ""
echo "Get started:"
echo "  dbology activate <your-license-key>"
echo "  dbology"
echo ""
echo "Purchase a license at https://databaseology.com"
