#!/bin/bash
#
# IOTunnel Client Installation Script
# Package server: pkgs.iotunnel.net
#
set -e

PKGS_BASE="https://pkgs.iotunnel.net"
IOTUNNEL_VERSION="${IOTUNNEL_VERSION:-0.35.1}"

# Detect OS and architecture
detect_platform() {
    OS="$(uname -s)"
    ARCH="$(uname -m)"

    case "$OS" in
        Linux)
            OS="linux"
            ;;
        Darwin)
            OS="darwin"
            ;;
        MINGW*|MSYS*|CYGWIN*)
            OS="windows"
            ;;
        *)
            echo "Unsupported OS: $OS"
            exit 1
            ;;
    esac

    case "$ARCH" in
        x86_64|amd64)
            ARCH="amd64"
            ;;
        arm64|aarch64)
            ARCH="arm64"
            ;;
        armv7*|armhf)
            ARCH="arm7"
            ;;
        armv6*)
            ARCH="arm6"
            ;;
        mips)
            ARCH="mips"
            ;;
        mipsel|mipsle)
            ARCH="mipsle"
            ;;
        *)
            echo "Unsupported architecture: $ARCH"
            exit 1
            ;;
    esac

    echo "Detected: $OS/$ARCH"
}

# Download and install IOTunnel
install_iotunnel() {
    local BINARY_URL
    local INSTALL_DIR="/usr/local/bin"
    local BINARY_NAME="iotunnel"

    case "$OS" in
        darwin)
            # Use universal binary for macOS
            BINARY_URL="${PKGS_BASE}/macos/universal"
            ;;
        linux)
            BINARY_URL="${PKGS_BASE}/linux/${ARCH}"
            ;;
        windows)
            BINARY_URL="${PKGS_BASE}/windows/${ARCH}"
            BINARY_NAME="iotunnel.exe"
            ;;
    esac

    echo "Downloading IOTunnel from ${BINARY_URL}..."

    # Create temp directory
    TMP_DIR=$(mktemp -d)
    trap "rm -rf $TMP_DIR" EXIT

    # Download binary
    if command -v curl &> /dev/null; then
        curl -fsSL "$BINARY_URL" -o "$TMP_DIR/$BINARY_NAME"
    elif command -v wget &> /dev/null; then
        wget -q "$BINARY_URL" -O "$TMP_DIR/$BINARY_NAME"
    else
        echo "Error: curl or wget is required"
        exit 1
    fi

    # Make executable
    chmod +x "$TMP_DIR/$BINARY_NAME"

    # Install
    if [ "$OS" = "darwin" ] || [ "$OS" = "linux" ]; then
        echo "Installing to $INSTALL_DIR (requires sudo)..."
        sudo mv "$TMP_DIR/$BINARY_NAME" "$INSTALL_DIR/$BINARY_NAME"

        # Install and start service
        echo "Installing IOTunnel service..."
        sudo "$INSTALL_DIR/$BINARY_NAME" service install
        sudo "$INSTALL_DIR/$BINARY_NAME" service start
    else
        # Windows - install to current directory
        mv "$TMP_DIR/$BINARY_NAME" "./$BINARY_NAME"
        echo "Downloaded to: ./$BINARY_NAME"
    fi

    echo ""
    echo "============================================"
    echo "IOTunnel installed successfully!"
    echo "============================================"
    echo ""
    echo "To connect to your network, run:"
    echo "  sudo iotunnel up"
    echo ""
    echo "Or with a setup key:"
    echo "  sudo iotunnel up --setup-key <YOUR_SETUP_KEY>"
    echo ""
}

# Main
main() {
    echo "============================================"
    echo "IOTunnel Installation Script"
    echo "Version: ${IOTUNNEL_VERSION}"
    echo "============================================"
    echo ""

    detect_platform
    install_iotunnel
}

main "$@"
