#!/bin/bash
DATADIR="/mnt/bitcoin-data/bitcoin"
ICON_ON="/home/ubtssd/.icons/btc_on.svg"
ICON_OFF="/home/ubtssd/.icons/btc_off.svg"
DESKTOP_FILE="/home/ubtssd/Bureau/NODE.desktop"
DASHBOARD="/home/ubtssd/btc_dashboard.html"

# Fonction flèche
arrow() {
    if (( $(echo "$1 > $2" | bc -l) )); then echo "↑"; else echo "↓"; fi
}

if bitcoin-cli -datadir="$DATADIR" getblockchaininfo > /dev/null 2>&1; then
    STATUS="🟢 ACTIVE"

    # Blockchain info
    INFO=$(bitcoin-cli -datadir="$DATADIR" getblockchaininfo 2>/dev/null)
    BLOCKS=$(echo "$INFO" | grep '"blocks"' | awk '{print $2}' | tr -d ',')
    HEADERS=$(echo "$INFO" | grep '"headers"' | awk '{print $2}' | tr -d ',')
    PROGRESS=$(echo "$INFO" | grep '"verificationprogress"' | awk '{print $2}' | tr -d ',')
    PROGRESS_PCT=$(echo "$PROGRESS * 100" | bc | cut -c1-6)
    DIFFICULTY=$(echo "$INFO" | grep '"difficulty"' | awk '{print $2}' | tr -d ',')

    # Peers
    PEERS=$(bitcoin-cli -datadir="$DATADIR" getconnectioncount 2>/dev/null)

    # Mempool
    MEMPOOL=$(bitcoin-cli -datadir="$DATADIR" getmempoolinfo 2>/dev/null | grep '"size"' | awk '{print $2}' | tr -d ',')

    # Mining / hashrate
    MINING=$(bitcoin-cli -datadir="$DATADIR" getmininginfo 2>/dev/null)
    HASHRATE=$(echo "$MINING" | grep '"networkhashps"' | awk '{print $2}' | tr -d ',')
    HASHRATE_EH=$(echo "scale=2; $HASHRATE / 1000000000000000000" | bc)

    # Difficulté bloc précédent (epoch précédent ~2016 blocs avant)
    PREV_BLOCK=$((BLOCKS - 2016))
    PREV_DIFF=$(bitcoin-cli -datadir="$DATADIR" getblockstats $PREV_BLOCK 2>/dev/null | grep '"difficulty"' | awk '{print $2}' | tr -d ',')

    # Hashrate bloc précédent approximatif
    PREV_HASH=$(bitcoin-cli -datadir="$DATADIR" getblockstats $PREV_BLOCK 2>/dev/null | grep '"avgfee"' | head -1)
    # Flèches
    DIFF_ARROW=$(arrow "$DIFFICULTY" "${PREV_DIFF:-$DIFFICULTY}")
    HASH_ARROW=$(arrow "$HASHRATE" "900000000000000000")

    # Formatage difficulté lisible (en T)
    DIFF_T=$(echo "scale=2; $DIFFICULTY / 1000000000000" | bc)

    MESSAGE="État : $STATUS
─────────────────────────────
📦 Bloc actuel     : $BLOCKS
📡 Headers         : $HEADERS
✅ Progression     : $PROGRESS_PCT%
👥 Peers           : $PEERS
🗂️  Mempool         : $MEMPOOL tx
─────────────────────────────
⛏️  Hashrate réseau : ${HASHRATE_EH} EH/s  $HASH_ARROW
🎯 Difficulté      : ${DIFF_T} T  $DIFF_ARROW
─────────────────────────────"

    ACTION=$(zenity --question \
        --title="Bitcoin Node" \
        --text="$MESSAGE" \
        --ok-label="🛑 Arrêter proprement" \
        --cancel-label="❌ Annuler" \
        --extra-button="📊 Dashboard" \
        --width=380 2>/dev/null)

    RESULT=$?

    if [ $RESULT -eq 0 ]; then
        bitcoin-cli -datadir="$DATADIR" stop
        zenity --info --title="Bitcoin Node" \
            --text="⏳ Arrêt en cours...\n\nLa node s'arrêtera proprement dans quelques secondes." \
            --width=300 --timeout=4 2>/dev/null
        while bitcoin-cli -datadir="$DATADIR" getblockchaininfo > /dev/null 2>&1; do
            sleep 2
        done
        sed -i "s|Icon=.*|Icon=$ICON_OFF|" "$DESKTOP_FILE"

    elif [ "$ACTION" = "📊 Dashboard" ]; then
        google-chrome --new-window "file://$DASHBOARD" &
    fi

else
    STATUS="🔴 ARRÊTÉE"
    MESSAGE="État : $STATUS
─────────────────────────────
La node Bitcoin n'est pas en cours d'exécution.
─────────────────────────────"

    ACTION=$(zenity --question \
        --title="Bitcoin Node" \
        --text="$MESSAGE" \
        --ok-label="🚀 Démarrer" \
        --cancel-label="❌ Annuler" \
        --width=380 2>/dev/null)

    if [ $? -eq 0 ]; then
        bitcoind -datadir="$DATADIR" -daemon
        zenity --info --title="Bitcoin Node" \
            --text="⏳ Démarrage en cours...\n\nLa node sera active dans quelques secondes." \
            --width=300 --timeout=4 2>/dev/null
        sleep 5
        sed -i "s|Icon=.*|Icon=$ICON_ON|" "$DESKTOP_FILE"
    fi
fi

