# VERSION=4.68
#!/bin/sh
# ============================================
# XUENET Downward Traffic Script
# ============================================
clear
SCRIPT_VERSION_SERVER="http://xuenet.co/file/down_traffic/get_traffic.sh"
URL_VERSION_SERVER="http://xuenet.co/file/down_traffic/urls.txt"
LOCAL_SCRIPT="/root/get_traffic.sh"
LOCAL_URLS="/root/urls.txt"
TMP_SCRIPT="/tmp/script_$$.sh"
TMP_URLS="/tmp/urls_$$.txt"

get_version() {
    head -1 "$1" 2>/dev/null | sed 's/.*VERSION=//;s/.*SCRIPT_VERSION=//' | awk '{print $1}'
}

is_valid() {
    [ -s "$1" ] && grep -qE "VERSION=|SCRIPT_VERSION=" "$1" 2>/dev/null
}

is_higher() {
    [ "$(echo "$1 $2" | awk '{print ($1 > $2)}')" = "1" ]
}

rm -f /tmp/wget_valid_*.txt

echo ""
echo ">>> Phase 0: Checking script version <<<"
echo "Current version: $(get_version $LOCAL_SCRIPT)"

LOCAL_VER=$(get_version $LOCAL_SCRIPT)
echo "Local version: ${LOCAL_VER:-?}"

if curl -s --max-time 10 -o "$TMP_SCRIPT" "$SCRIPT_VERSION_SERVER" 2>/dev/null; then
    if is_valid "$TMP_SCRIPT"; then
        REMOTE_VER=$(get_version $TMP_SCRIPT)
        echo "Remote version: ${REMOTE_VER:-?}"
        
        if [ "$LOCAL_VER" != "$REMOTE_VER" ] && [ -n "$REMOTE_VER" ]; then
            if is_higher "$REMOTE_VER" "$LOCAL_VER"; then
                echo "New version! Updating..."
                chmod +x "$TMP_SCRIPT"
                mv "$TMP_SCRIPT" "$LOCAL_SCRIPT"
                echo "Updated to v${REMOTE_VER}! Run again."
                exit 0
            else
                echo "Remote version lower, skip update."
                rm -f "$TMP_SCRIPT"
            fi
        else
            echo "Same version, no update."
            rm -f "$TMP_SCRIPT"
        fi
    else
        echo "Remote invalid, keep local."
        rm -f "$TMP_SCRIPT"
    fi
else
    echo "Remote unreachable, keep local."
    rm -f "$TMP_SCRIPT"
fi

echo ""
echo ">>> Phase 0b: Checking URL list version <<<"

if [ -f "$LOCAL_URLS" ]; then
    LOCAL_URLS_VER=$(get_version $LOCAL_URLS)
    echo "Local version: ${LOCAL_URLS_VER:-none}"
    LOCAL_URLS_EXISTS=1
else
    LOCAL_URLS_VER=""
    echo "Local version: none"
    LOCAL_URLS_EXISTS=0
fi

if ! curl -s --max-time 10 -o "$TMP_URLS" "$URL_VERSION_SERVER" 2>/dev/null; then
    echo "Remote unreachable!"
    rm -f "$TMP_URLS"
    [ "$LOCAL_URLS_EXISTS" -eq 0 ] && { echo "ERROR: No local urls.txt!"; exit 1; }
else
    if is_valid "$TMP_URLS"; then
        REMOTE_URLS_VER=$(get_version $TMP_URLS)
        echo "Remote version: ${REMOTE_URLS_VER:-none}"
        
        if [ "$LOCAL_URLS_EXISTS" -eq 0 ]; then
            mv "$TMP_URLS" "$LOCAL_URLS"
			sed -i 's/\r$//' "$LOCAL_URLS"
            echo "urls.txt downloaded!"
        elif [ "$LOCAL_URLS_VER" != "$REMOTE_URLS_VER" ]; then
            if is_higher "$REMOTE_URLS_VER" "$LOCAL_URLS_VER"; then
                echo "New urls version! Updating..."
                mv "$TMP_URLS" "$LOCAL_URLS"
				sed -i 's/\r$//' "$LOCAL_URLS"
                echo "urls.txt updated!"
            else
                echo "Remote version lower, skip update."
                rm -f "$TMP_URLS"
            fi
        else
            echo "Same version, no update."
            rm -f "$TMP_URLS"
        fi
    else
        echo "Remote invalid! Use local."
        rm -f "$TMP_URLS"
        [ "$LOCAL_URLS_EXISTS" -eq 0 ] && { echo "ERROR: No local urls.txt!"; exit 1; }
    fi
fi

echo "#############################################################################"
# ========== Banner ==========
echo "######                   COPYRIGHT(C)2001-2025 XUENET,SOFTWARE INC.       ###"
echo "#     #   ####   #    #  #    #          ######  #        ####   #    #   ###"
echo "#     #  #    #  #    #  ##   #          #       #       #    #  #    #   ###"
echo "#     #  #    #  #    #  # #  #          #####   #       #    #  #    #    #"
echo "#     #  #    #  # ## #  #  # #          #       #       #    #  # ## #"
echo "#     #  #    #  ##  ##  #   ##          #       #       #    #  ##  ##   ###"
echo "######    ####   #    #  #    # #######  #       ######   ####   #    #   ###"
echo "--------------------------------------------------------------------------------"
echo "  XUENET Downward Traffic Script v$(get_version $LOCAL_SCRIPT)"
echo "--------------------------------------------------------------------------------"
echo "  | |/ / / / / ____/ / | / / ____/_  __/"
echo "  |   / / / / __/ /  |/ / __/   / /"
echo " /   / /_/ / /___/ /|  / /___  / /"
echo "/_/|_\____/_____/_/ |_/_____/ /_/"
echo "================================================================================"
echo ""
echo ">>> Phase 1: Checking URLs <<<"
echo ""

URL_FILE="$LOCAL_URLS"
TMP_FILE="/tmp/wget_valid_$$.txt"

[ -f "$URL_FILE" ] || { echo "urls.txt not found!"; exit 1; }

> "$TMP_FILE"
valid_count=0
invalid_count=0

while IFS= read -r url; do
    [ -z "$url" ] && continue
    [ "$(echo $url | cut -c1)" = "#" ] && continue

    printf "[CHECK] %-65s " "$(echo $url | cut -c1-60)"

    http_code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 3 "$url" 2>/dev/null)

    if [ "$http_code" = "200" ] || [ "$http_code" = "301" ] || [ "$http_code" = "302" ]; then
        echo "[V OK]"
        valid_count=$((valid_count + 1))
        echo "$url" >> "$TMP_FILE"
    else
        echo "[X FAIL]"
        invalid_count=$((invalid_count + 1))
    fi
done < "$URL_FILE"

echo ""
echo ">>> Phase 2: Downloading (parallel) <<<"
echo "Valid: $valid_count | Invalid: $invalid_count"
echo ""

if [ "$valid_count" -eq 0 ]; then
    echo "No valid URLs"
    rm -f "$TMP_FILE"
else
    while IFS= read -r url; do
        [ -z "$url" ] && continue
        (
            printf "[DOWN] %-65s\n" "$(echo $url | cut -c1-60)"
            wget -q -O /dev/null "$url" 2>&1
            [ $? -eq 0 ] && echo "[OK]" || echo "[FAIL]"
        ) &
    done < "$TMP_FILE"
    wait
    rm -f "$TMP_FILE"
fi

echo ""
echo "=== Done ==="
