#!/bin/bash
# Run 6-month backtest in monthly segments, chaining final balance → next initial balance
# Each month runs independently to avoid OOM on the full dataset

cd /var/www/html/crpytotradingbot

MONTHS="202508 202509 202510 202511 202512 202601 202602"
BALANCE=20000.0
ORIGINAL_BALANCE=$BALANCE
RESULTS_FILE="results/segmented_run_$(date +%Y%m%d_%H%M%S).txt"
mkdir -p results

echo "=== SEGMENTED 6-MONTH BACKTEST ===" | tee "$RESULTS_FILE"
echo "Starting balance: \$${BALANCE}" | tee -a "$RESULTS_FILE"
echo "" | tee -a "$RESULTS_FILE"

TOTAL_TRADES=0
TOTAL_GROSS_PROFIT=0
TOTAL_GROSS_LOSS=0
TOTAL_COMMISSION=0
OVERALL_MAX_DD_PCT=0
OVERALL_MIN_EQUITY=999999999

for MONTH in $MONTHS; do
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | tee -a "$RESULTS_FILE"
    echo "SEGMENT: $MONTH | Starting balance: \$$(printf '%.2f' $BALANCE)" | tee -a "$RESULTS_FILE"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | tee -a "$RESULTS_FILE"
    
    # Update initial balance in settings.py
    sed -i "s/^INITIAL_BALANCE = .*/INITIAL_BALANCE = ${BALANCE}/" settings.py
    
    # Run backtest for this month (0 = all rows)
    OUTPUT=$(nice -n 15 python3 bot_runner.py --csv="$MONTH" --max-rows=0 --timeout=480 --throttle=2 2>&1)
    EXIT_CODE=$?
    
    echo "$OUTPUT" | tee -a "$RESULTS_FILE"
    echo "" | tee -a "$RESULTS_FILE"
    
    if [ $EXIT_CODE -ne 0 ]; then
        echo "ERROR: Segment $MONTH failed (exit $EXIT_CODE)" | tee -a "$RESULTS_FILE"
        # Restore original balance
        sed -i "s/^INITIAL_BALANCE = .*/INITIAL_BALANCE = 20000.0/" settings.py
        exit 1
    fi
    
    # Extract final balance from the result JSON
    RESULT_JSON=$(ls -t results/result_*.json | head -1)
    if [ -f "$RESULT_JSON" ]; then
        NEW_BALANCE=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(round($BALANCE + d.get('net_profit', 0), 2))")
        TRADES=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('total_trades', 0))")
        GP=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('gross_profit', 0))")
        GL=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('gross_loss', 0))")
        COMM=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('commission', 0))")
        DD=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('max_dd_pct', 0))")
        MINEQ=$(python3 -c "import json; d=json.load(open('$RESULT_JSON')); print(d.get('min_equity', 999999999))")
        
        TOTAL_TRADES=$((TOTAL_TRADES + TRADES))
        TOTAL_GROSS_PROFIT=$(python3 -c "print($TOTAL_GROSS_PROFIT + $GP)")
        TOTAL_GROSS_LOSS=$(python3 -c "print($TOTAL_GROSS_LOSS + $GL)")
        TOTAL_COMMISSION=$(python3 -c "print($TOTAL_COMMISSION + $COMM)")
        
        # Track worst DD across segments
        IS_WORSE=$(python3 -c "print(1 if $DD > $OVERALL_MAX_DD_PCT else 0)")
        if [ "$IS_WORSE" -eq 1 ]; then
            OVERALL_MAX_DD_PCT=$DD
        fi
        
        IS_LOWER=$(python3 -c "print(1 if $MINEQ < $OVERALL_MIN_EQUITY else 0)")
        if [ "$IS_LOWER" -eq 1 ]; then
            OVERALL_MIN_EQUITY=$MINEQ
        fi
        
        echo "→ $MONTH done: \$$(printf '%.2f' $BALANCE) → \$$(printf '%.2f' $NEW_BALANCE) | Trades: $TRADES | DD: ${DD}%" | tee -a "$RESULTS_FILE"
        BALANCE=$NEW_BALANCE
    else
        echo "WARNING: No result JSON found for $MONTH" | tee -a "$RESULTS_FILE"
    fi
    
    echo "" | tee -a "$RESULTS_FILE"
done

# Restore original balance
sed -i "s/^INITIAL_BALANCE = .*/INITIAL_BALANCE = 20000.0/" settings.py

# Summary
NET_PROFIT=$(python3 -c "print(round($BALANCE - $ORIGINAL_BALANCE, 2))")
TOTAL_RETURN=$(python3 -c "print(round(($BALANCE - $ORIGINAL_BALANCE) / $ORIGINAL_BALANCE * 100, 2))")
PF=$(python3 -c "gl=abs($TOTAL_GROSS_LOSS); print(round($TOTAL_GROSS_PROFIT / gl, 2) if gl > 0 else 'inf')")

echo "" | tee -a "$RESULTS_FILE"
echo "╔══════════════════════════════════════════════════════╗" | tee -a "$RESULTS_FILE"
echo "║  COMBINED 6-MONTH RESULTS (Aug 2025 - Feb 2026)     ║" | tee -a "$RESULTS_FILE"
echo "╠══════════════════════════════════════════════════════╣" | tee -a "$RESULTS_FILE"
echo "║  Starting Balance:  \$$(printf '%12.2f' $ORIGINAL_BALANCE)                   ║" | tee -a "$RESULTS_FILE"
echo "║  Final Balance:     \$$(printf '%12.2f' $BALANCE)                   ║" | tee -a "$RESULTS_FILE"
echo "║  Net Profit:        \$$(printf '%12.2f' $NET_PROFIT)                   ║" | tee -a "$RESULTS_FILE"
echo "║  Total Return:      $(printf '%8s' $TOTAL_RETURN)%                         ║" | tee -a "$RESULTS_FILE"
echo "║  Worst Segment DD:  $(printf '%8s' $OVERALL_MAX_DD_PCT)%                         ║" | tee -a "$RESULTS_FILE"
echo "║  Min Equity:        \$$(printf '%12.2f' $OVERALL_MIN_EQUITY)                   ║" | tee -a "$RESULTS_FILE"
echo "║  Total Trades:      $(printf '%8s' $TOTAL_TRADES)                          ║" | tee -a "$RESULTS_FILE"
echo "║  Profit Factor:     $(printf '%8s' $PF)                          ║" | tee -a "$RESULTS_FILE"
echo "║  Total Commission:  \$$(printf '%12.2f' $TOTAL_COMMISSION)                   ║" | tee -a "$RESULTS_FILE"
echo "╚══════════════════════════════════════════════════════╝" | tee -a "$RESULTS_FILE"
echo "" | tee -a "$RESULTS_FILE"
echo "Full results: $RESULTS_FILE" | tee -a "$RESULTS_FILE"
