#!/bin/sh

# Gecikme Haritasi Test Araci

LOCAL_VERSION="1.9"
VERSION_URL="https://gecikmeharitasi.net/admin/version.php"
UPDATE_URL="https://gecikmeharitasi.net/admin/guncel_script.php"
SCRIPT_PATH="$(readlink -f "$0")"

LOCK_FILE="/tmp/gecikme_test.lock"

# ================================
# LOCK (aynı anda 2 kez çalışmasın)
# ================================
if [ -f "$LOCK_FILE" ]; then
    echo "[!] Script zaten calisiyor, cikiliyor"
    exit 1
fi

touch "$LOCK_FILE"

# ================================
# AUTO UPDATE
# ================================
echo "[*] Guncelleme kontrol ediliyor..."
REMOTE_VERSION=$(curl -s "$VERSION_URL" | head -n 1 | tr -d '\r')

if [ -n "$REMOTE_VERSION" ]; then
    if [ "$REMOTE_VERSION" != "$LOCAL_VERSION" ]; then
        echo "[*] Yeni versiyon bulundu: $REMOTE_VERSION"
        curl -s -o "/tmp/update.sh" "$UPDATE_URL"
        if [ -f "/tmp/update.sh" ]; then
            mv "/tmp/update.sh" "$SCRIPT_PATH"
            chmod +x "$SCRIPT_PATH"
            echo "[+] Guncellendi, yeniden baslatiliyor..."
            rm -f "$LOCK_FILE"
            exec "$SCRIPT_PATH"
        fi
    else
        echo "[+] Guncel (v$LOCAL_VERSION)"
    fi
else
    echo "[-] Versiyon kontrol basarisiz"
fi

# ================================
# TOKEN
# ================================
TOKEN_DOSYASI="/etc/config/gecikme_haritasi_token"
IL_KONTROL_API="https://gecikmeharitasi.net/admin/il_kontrol.php"

if [ ! -f "$TOKEN_DOSYASI" ]; then
    echo "[*] API Kodunu gir:"
    read USER_TOKEN
    echo "$USER_TOKEN" > "$TOKEN_DOSYASI"
else
    USER_TOKEN=$(cat "$TOKEN_DOSYASI" | tr -d '\r')
fi

echo "[*] Kullanici dogrulaniyor..."
API_RESP=$(curl -s -X POST -d "auth_token=$USER_TOKEN" "$IL_KONTROL_API" | tr -d '\r')

echo "$API_RESP" | grep -q "^OK|"

if [ $? -ne 0 ]; then
    echo "[X] Token hatali"
    rm -f "$TOKEN_DOSYASI"
    rm -f "$LOCK_FILE"
    exit 1
fi

API_USER=$(echo "$API_RESP" | cut -d'|' -f2)
API_CITY=$(echo "$API_RESP" | cut -d'|' -f3)

echo "[+] Hos geldin $API_USER ($API_CITY)"

# ================================
# SERVER LIST VE MODEM TEST
# ================================
SUNUCU_API="https://gecikmeharitasi.net/admin/sunucular.php"

echo "[*] Sunucu listesi aliniyor..."
curl -s "$SUNUCU_API" > /tmp/servers.txt

IP_GW=$(ip route | grep default | awk '{print $3}' | head -n 1)
[ -z "$IP_GW" ] && IP_GW="192.168.1.1"

echo "[-] Modem test ediliyor ($IP_GW)"
PING_GW=$(ping -c 2 -W 2 "$IP_GW" | awk -F '/' 'END {print $5}' | awk '{printf "%.0f", $1}')
[ -z "$PING_GW" ] && PING_GW=999

# --- GÜVENLİK: SCRIPT HASH HESAPLAMA ---
SCRIPT_HASH=$(sha256sum "$SCRIPT_PATH" | awk '{print $1}')

POST_DATA="auth_token=$USER_TOKEN&ping_gateway=$PING_GW&script_hash=$SCRIPT_HASH"

while IFS='=' read KEY VAL; do
    KEY=$(echo "$KEY" | tr -d '\r')
    VAL=$(echo "$VAL" | tr -d '\r' | awk '{print $1}')

    [ -z "$KEY" ] && continue
    [ -z "$VAL" ] && continue

    NAME=$(echo "$KEY" | sed 's/_IP//g' | tr ' ' '_')

    echo "[-] $NAME test ediliyor ($VAL)"

    PING_VAL=$(ping -c 2 -W 2 "$VAL" | awk -F '/' 'END {print $5}' | awk '{printf "%.0f", $1}')
    [ -z "$PING_VAL" ] && PING_VAL=999

    POST_DATA="${POST_DATA}&ping_${NAME}=${PING_VAL}"

done < /tmp/servers.txt

# ================================
# SEND DATA
# ================================
echo "[*] Veriler gonderiliyor..."

SITE_API="https://gecikmeharitasi.net/admin/test_kaydet.php"

curl -s -X POST \
    -H "X-Gecikme-App: Harita2026Secure" \
    -d "$POST_DATA" \
    "$SITE_API"

echo "[+] Tamamlandi"

rm -f /tmp/servers.txt

# ================================
# CRON AUTO SETUP
# ================================
CRON_FILE="/etc/crontabs/root"
CRON_JOB="0 2 */5 * * $SCRIPT_PATH >/dev/null 2>&1"

echo "[*] Cron kontrol ediliyor..."

grep -F "$SCRIPT_PATH" "$CRON_FILE" >/dev/null 2>&1

if [ $? -ne 0 ]; then
    echo "[*] Cron job ekleniyor..."
    echo "$CRON_JOB" >> "$CRON_FILE"
    /etc/init.d/cron restart
    echo "[+] Cron eklendi (5 gunde bir 02:00)"
else
    echo "[+] Cron zaten mevcut"
fi

# ================================
# CLEANUP
# ================================
rm -f "$LOCK_FILE"