#!/bin/bash

# Define color codes for output
RED='\033[0;31m'
NC='\033[0m' # No color


# Check if Qortal is running
QORTAL_RUNNING=$(pgrep -f 'java.*qortal' > /dev/null && echo 1 || echo 0)
GUI_START="${HOME}/.config/autostart/start-qortal.desktop"
QORTAL_LOG="${HOME}/qortal/qortal.log"

if [[ -f "$GUI_START" ]]; then
    echo "Qortal is set to start via GUI. Checking if it is running..."

    if [[ "$QORTAL_RUNNING" -eq 1 ]]; then
        echo "Qortal is already running. Checking if it's responding..."
        sleep 60
        QORTAL_RESPONDING=$(curl -sS --connect-timeout 10 "localhost:12391/admin/status")

        if [[ -n "$QORTAL_RESPONDING" ]]; then
            echo "Qortal is running and responding. Exiting..."
            exit 0
        else
            echo "Qortal is running but not responding. Checking for bootstrapping..."
            if tail -n 5 "$QORTAL_LOG" | grep -Ei 'bootstrap|bootstrapping' > /dev/null; then
                echo -e "${RED}Node seems to be bootstrapping, assuming it is fine, exiting...${NC}"
                exit 0
            fi
            echo "Qortal is not bootstrapping. Restarting..."
            killall -9 java
            sleep 5
        fi
    fi

    echo "Qortal is not running. Starting Qortal..."
    cd "${HOME}/qortal" || exit
    ./start.sh
    echo "Waiting 120 seconds..."
    sleep 120

    QORTAL_RUNNING=$(pgrep -f 'java.*qortal' > /dev/null && echo 1 || echo 0)
    QORTAL_RESPONDING=$(curl -sS --connect-timeout 10 "localhost:12391/admin/status")

    if [[ "$QORTAL_RUNNING" -eq 1 ]]; then 
        echo "Qortal started successfully. Verifying response after 60 seconds..."
        sleep 60
        if [[ -n "$QORTAL_RESPONDING" ]]; then
            echo "Qortal is responding! All good! Exiting..."
            exit 0
        fi
    fi

    echo "Qortal is still not running. Checking for auto-fix-visible script..."
    if [[ -f "${HOME}/.config/autostart/auto-fix-visible*" ]]; then
        echo "Auto-fix script exists. Waiting for it to run..."
        exit 1
    else 
        echo "Auto-fix script not found. Downloading and executing manually..."
        curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/auto-fix-qortal.sh
        chmod +x auto-fix-qortal.sh
        ./auto-fix-qortal.sh
        exit 0
    fi
else 
    echo "Qortal is not set to start via GUI. Checking if it is running..."
    
    if [[ "$QORTAL_RUNNING" -eq 1 ]]; then
        echo "Qortal is running. Checking response after 60 seconds..."
        sleep 60
        QORTAL_RESPONDING=$(curl -sS --connect-timeout 10 "localhost:12391/admin/status")

        if [[ -n "$QORTAL_RESPONDING" ]]; then
            echo "Qortal is responding. Exiting..."
            exit 0
        else
            echo "Qortal is running but unresponsive. Checking for bootstrapping..."
            if tail -n 5 "$QORTAL_LOG" | grep -Ei 'bootstrap|bootstrapping' > /dev/null; then
                echo -e "${RED}Node seems to be bootstrapping, assuming it is operational... exiting...${NC}"
                exit 0
            fi
            echo "Qortal is not bootstrapping. Restarting..."
            killall -9 java
            sleep 5
        fi
    fi

    echo "Qortal is not running. Attempting to start..."
    cd "${HOME}/qortal" || exit
    ./start.sh
    echo "Start script executed. Waiting 90 seconds..."
    sleep 90

    QORTAL_RUNNING=$(pgrep -f 'java.*qortal' > /dev/null && echo 1 || echo 0)
    QORTAL_RESPONDING=$(curl -sS --connect-timeout 10 "localhost:12391/admin/status")

    if [[ "$QORTAL_RUNNING" -eq 1 ]]; then
        echo "Qortal started successfully. Checking response..."
        if [[ -n "$QORTAL_RESPONDING" ]]; then
            echo "Qortal is running and responding! Exiting..."
            exit 0
        fi
    fi

    echo "Qortal did not start. Killing Java processes and retrying..."
    killall -9 java
    cd "${HOME}/qortal"
    ./start.sh

    echo "Checking crontab for auto-fix script..."
    if crontab -l | grep -q '#.*auto-fix-qortal.sh'; then
        echo "Auto-fix script is commented out. Running manually..."
        curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/auto-fix-qortal.sh
        chmod +x auto-fix-qortal.sh
        ./auto-fix-qortal.sh
        exit 0
    elif crontab -l | grep -q '[^#]*auto-fix-qortal.sh'; then
        echo "Auto-fix script is in crontab. Checking machine uptime..."
        UPTIME=$(awk '{print int($1)}' /proc/uptime)

        if [[ "$UPTIME" -ge 420 ]]; then
            echo "Machine has been online for over 7 minutes. Running auto-fix manually..."
            curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/auto-fix-qortal.sh
            chmod +x auto-fix-qortal.sh
            ./auto-fix-qortal.sh
            exit 0
        else
            echo "Machine has been online less than 7 minutes. Allowing auto-fix script to run automatically..."
            exit 0
        fi
    else
        echo "Auto-fix script not found in crontab. Running manually and setting up auto-run..."
        curl -L -O https://raw.githubusercontent.com/crowetic/QORTector-scripts/main/auto-fix-qortal.sh
        chmod +x auto-fix-qortal.sh
        ./auto-fix-qortal.sh
        exit 0
    fi
fi