#!/usr/bin/env bash
# Freqtrade Backtesting & Validation Plan
# Run from: /home/vincent/freqtrade-user
# Usage: bash backtest_plan.sh [phase]
#   phase: download | backtest | compare | hyperopt | all

set -euo pipefail

VENV="/home/vincent/freqtrade/.venv"
USER_DIR="/home/vincent/freqtrade-user"
CONFIG="${USER_DIR}/config.json"
DATA_DIR="${USER_DIR}/data"
RESULTS_DIR="${USER_DIR}/backtest_results"

PAIRS="BTC/USD,ETH/USD,SOL/USD,XRP/USD,ADA/USD,AVAX/USD,LINK/USD"
TIMEFRAMES="5m"
DAYS=180

activate_venv() {
    source "${VENV}/bin/activate"
    cd "${USER_DIR}"
}

phase_download() {
    echo "=== Phase 1: Download market data ==="
    echo "Downloading ${DAYS} days of ${TIMEFRAMES} data for ${PAIRS}"
    freqtrade download-data \
        --exchange kraken \
        --pairs "${PAIRS}" \
        --timeframes ${TIMEFRAMES} \
        --days ${DAYS} \
        --datadir "${DATA_DIR}" \
        --erase
    echo "Download complete. Data stored in ${DATA_DIR}/kraken/"
    ls -la "${DATA_DIR}/kraken/" | head -20
}

phase_backtest() {
    echo "=== Phase 2: Backtest strategies ==="

    echo ""
    echo "--- Backtesting ImprovedSimpleStrategy ---"
    freqtrade backtesting \
        --strategy ImprovedSimpleStrategy \
        --config "${CONFIG}" \
        --timerange 20260101-20260701 \
        --timeframe 5m \
        --export trades \
        --exportfilename "${RESULTS_DIR}/improved_backtest.json"

    echo ""
    echo "--- Backtesting SimpleStrategy (baseline) ---"
    freqtrade backtesting \
        --strategy SimpleStrategy \
        --config "${CONFIG}" \
        --timerange 20260101-20260701 \
        --timeframe 5m \
        --export trades \
        --exportfilename "${RESULTS_DIR}/simple_backtest.json"

    echo ""
    echo "--- Backtesting TrendPullbackStrategy ---"
    freqtrade backtesting \
        --strategy TrendPullbackStrategy \
        --config "${CONFIG}" \
        --timerange 20260101-20260701 \
        --timeframe 5m \
        --export trades \
        --exportfilename "${RESULTS_DIR}/trendpullback_backtest.json"
}

phase_compare() {
    echo "=== Phase 3: Compare strategies ==="
    freqtrade backtesting \
        --strategy-list ImprovedSimpleStrategy SimpleStrategy TrendPullbackStrategy \
        --config "${CONFIG}" \
        --timerange 20260101-20260701 \
        --timeframe 5m \
        --export trades \
        --exportfilename "${RESULTS_DIR}/comparison_backtest.json"
}

phase_hyperopt() {
    echo "=== Phase 4: Hyperopt (buy + sell spaces) ==="
    echo "This takes a while. Run with: --epochs 1000 or more for good results"
    freqtrade hyperopt \
        --strategy ImprovedSimpleStrategy \
        --config "${CONFIG}" \
        --timerange 20260101-20260501 \
        --timeframe 5m \
        --spaces buy sell \
        --epochs 500 \
        --print-all
}

phase_validate() {
    echo "=== Phase 5: Validate on held-out data ==="
    echo "Using hyperopt-optimized parameters, validate on unseen data (May-Jul 2026)"
    freqtrade backtesting \
        --strategy ImprovedSimpleStrategy \
        --config "${CONFIG}" \
        --timerange 20260501-20260701 \
        --timeframe 5m \
        --export trades
}

# Main
case "${1:-all}" in
    download)   phase_download ;;
    backtest)   phase_backtest ;;
    compare)    phase_compare ;;
    hyperopt)   phase_hyperopt ;;
    validate)   phase_validate ;;
    all)
        echo "Running full backtest plan..."
        echo "Note: Download phase may take several minutes."
        echo "To run individual phases, use: bash backtest_plan.sh [phase]"
        echo ""
        echo "Available phases:"
        echo "  download  - Download market data"
        echo "  backtest  - Run backtests on all strategies"
        echo "  compare   - Compare strategies side by side"
        echo "  hyperopt  - Optimize parameters (long)"
        echo "  validate  - Validate on held-out data"
        ;;
    *)
        echo "Unknown phase: $1"
        echo "Available: download, backtest, compare, hyperopt, validate, all"
        exit 1
        ;;
esac