#!/bin/sh
# Tailscale update helper script

ARCH=$(uname -m)
case "$ARCH" in
    x86_64|amd64) TS_ARCH="amd64" ;;
    aarch64|arm64) TS_ARCH="arm64" ;;
    armv7l) TS_ARCH="arm" ;;
    *) echo '{"error":"unsupported architecture: '$ARCH'"}'; exit 1 ;;
esac

get_current_version() {
    if [ -x /usr/sbin/tailscale ]; then
        /usr/sbin/tailscale version 2>/dev/null | head -1 | tr -d '\n'
    else
        echo "not installed"
    fi
}

check_update() {
    CURRENT=$( get_current_version )
    LATEST=$( wget -qO- "https://api.github.com/repos/tailscale/tailscale/releases/latest" 2>/dev/null | \
        grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/' )
    if [ -z "$LATEST" ]; then
        echo "{\"current\":\"$CURRENT\",\"latest\":\"unknown\",\"error\":\"failed to fetch latest version\"}"
    else
        echo "{\"current\":\"$CURRENT\",\"latest\":\"$LATEST\"}"
    fi
}

do_update() {
    LATEST=$( wget -qO- "https://api.github.com/repos/tailscale/tailscale/releases/latest" 2>/dev/null | \
        grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/' )
    if [ -z "$LATEST" ]; then
        echo '{"error":"failed to fetch latest version"}'
        exit 1
    fi

    URL="https://pkgs.tailscale.com/stable/tailscale_${LATEST}_${TS_ARCH}.tgz"
    TMP_DIR="/tmp/tailscale_update"
    rm -rf "$TMP_DIR"
    mkdir -p "$TMP_DIR"

    wget -qO "$TMP_DIR/tailscale.tgz" "$URL" 2>/dev/null
    if [ ! -s "$TMP_DIR/tailscale.tgz" ]; then
        echo "{\"error\":\"download failed: $URL\"}"
        rm -rf "$TMP_DIR"
        exit 1
    fi

    tar -xzf "$TMP_DIR/tailscale.tgz" -C "$TMP_DIR" 2>/dev/null
    EXTRACT_DIR="$TMP_DIR/tailscale_${LATEST}_${TS_ARCH}"

    if [ ! -f "$EXTRACT_DIR/tailscale" ] || [ ! -f "$EXTRACT_DIR/tailscaled" ]; then
        echo '{"error":"extracted files not found"}'
        rm -rf "$TMP_DIR"
        exit 1
    fi

    /etc/init.d/tailscale stop 2>/dev/null
    sleep 1

    cp "$EXTRACT_DIR/tailscale" /usr/sbin/tailscale
    cp "$EXTRACT_DIR/tailscaled" /usr/sbin/tailscaled
    chmod +x /usr/sbin/tailscale /usr/sbin/tailscaled

    /etc/init.d/tailscale start 2>/dev/null

    rm -rf "$TMP_DIR"

    NEW_VER=$( get_current_version )
    echo "{\"success\":true,\"version\":\"$NEW_VER\"}"
}

case "$1" in
    check_update) check_update ;;
    do_update) do_update ;;
    *) echo '{"error":"usage: tailscale_helper check_update|do_update"}' ;;
esac
