#!/bin/bash
# Background backtest runner for TheCryptoClaw bot
# Usage: ./run_backtest_bg.sh [--dataset=6month|5year] [--max-rows=N] [--tf=5min]

cd /var/www/html/crpytotradingbot

DATASET="6month"
MAX_ROWS="500000"
TF="5min"
RUN_ID=$(date +%Y%m%d_%H%M%S)

for arg in "$@"; do
    case $arg in
        --dataset=*) DATASET="${arg#*=}" ;;
        --max-rows=*) MAX_ROWS="${arg#*=}" ;;
        --tf=*) TF="${arg#*=}" ;;
    esac
done

if [ "$DATASET" = "5year" ]; then
    CSV="BTCUSD.csv"
elif [ "$DATASET" = "6month" ]; then
    CSV="BTCUSD_PAST6MONTHS.csv"
else
    CSV="BTCUSD_PAST6MONTHS.csv"
fi

RESULTS_DIR="/var/www/html/crpytotradingbot/results"
mkdir -p "$RESULTS_DIR"

STATUS_FILE="$RESULTS_DIR/status_${RUN_ID}.txt"
OUTPUT_FILE="$RESULTS_DIR/output_${RUN_ID}.txt"

echo "running" > "$STATUS_FILE"
echo "Run ID: $RUN_ID" >> "$STATUS_FILE"
echo "Dataset: $CSV" >> "$STATUS_FILE"
echo "Max rows: $MAX_ROWS" >> "$STATUS_FILE"
echo "Timeframe: $TF" >> "$STATUS_FILE"
echo "Started: $(date)" >> "$STATUS_FILE"

# Create a temporary Python script that uses the right CSV
cat > "/tmp/backtest_${RUN_ID}.py" << PYEOF
import sys, os
os.chdir("/var/www/html/crpytotradingbot")
sys.path.insert(0, "/var/www/html/crpytotradingbot")

import settings
from run_btc_backtest import load_ticks_to_candles
from backtest import BacktestEngine
from utils import setup_logging

setup_logging(console=False, file=True)

csv_path = "${CSV}"
max_rows = ${MAX_ROWS} if ${MAX_ROWS} > 0 else None
timeframe = "${TF}"

data = load_ticks_to_candles(csv_path, timeframe=timeframe, max_rows=max_rows)
print(f"Running backtest: {len(data)} candles")

engine = BacktestEngine(
    symbol=settings.SYMBOL,
    initial_balance=settings.INITIAL_BALANCE,
    commission_percent=settings.COMMISSION_PERCENT,
    slippage_pips=settings.SLIPPAGE_PIPS,
)

result = engine.run(data, progress_callback=None)
result.print_summary()

import json
with open("/var/www/html/crpytotradingbot/results/result_${RUN_ID}.json", "w") as f:
    json.dump(result.to_dict(), f, indent=2)
PYEOF

nohup python3 "/tmp/backtest_${RUN_ID}.py" > "$OUTPUT_FILE" 2>&1 &
BG_PID=$!

echo "PID: $BG_PID" >> "$STATUS_FILE"
echo "$RUN_ID"

# Wait for completion in background and update status
(
    wait $BG_PID
    EXIT_CODE=$?
    if [ $EXIT_CODE -eq 0 ]; then
        sed -i 's/^running/complete/' "$STATUS_FILE"
    else
        sed -i 's/^running/failed/' "$STATUS_FILE"
    fi
    echo "Finished: $(date)" >> "$STATUS_FILE"
    echo "Exit code: $EXIT_CODE" >> "$STATUS_FILE"
    rm -f "/tmp/backtest_${RUN_ID}.py"
) &
