# Development Environment Setup

This guide will help you set up the Crypto Trading Bot Dashboard development environment.

## Prerequisites

- Python 3.10+
- Docker Desktop (for Windows/Mac) or Docker Engine (for Linux)
- UV package manager
- Git

## Quick Start

### 1. Initial Setup

```bash
# Install dependencies (including dev tools)
uv sync --dev

# Set up environment and start services
python scripts/dev.py setup
```

### 2. Start Services

```bash
# Start PostgreSQL and Redis services
python scripts/dev.py start
```

### 3. Configure API Keys

Copy `env.template` to `.env` and update the OKX API credentials:

```bash
# Copy template (Windows)
copy env.template .env

# Copy template (Unix)
cp env.template .env

# Edit .env file with your actual OKX API credentials
# OKX_API_KEY=your_actual_api_key
# OKX_SECRET_KEY=your_actual_secret_key  
# OKX_PASSPHRASE=your_actual_passphrase
```

### 4. Verify Setup

```bash
# Run setup verification tests
uv run python tests/test_setup.py
```

### 5. Start Dashboard with Hot Reload

```bash
# Start with hot reload (recommended for development)
python scripts/dev.py dev-server

# Or start without hot reload
python scripts/dev.py run
```

## Development Commands

### Using the dev.py script:

```bash
# Show available commands
python scripts/dev.py

# Set up environment and install dependencies
python scripts/dev.py setup

# Start all services (Docker)
python scripts/dev.py start

# Stop all services  
python scripts/dev.py stop

# Restart services
python scripts/dev.py restart

# Check service status
python scripts/dev.py status

# Install/update dependencies
python scripts/dev.py install

# Run development server with hot reload
python scripts/dev.py dev-server

# Run application without hot reload
python scripts/dev.py run
```

### Direct Docker commands:

```bash
# Start services in background
docker-compose up -d

# View service logs
docker-compose logs -f

# Stop services
docker-compose down

# Rebuild and restart
docker-compose up -d --build
```

## Hot Reload Development

The development server includes hot reload functionality that automatically restarts the application when Python files change.

### Features:
- 🔥 **Auto-restart** on file changes
- 👀 **Watches multiple directories** (config, database, components, etc.)
- 🚀 **Fast restart** with debouncing (1-second delay)
- 🛑 **Graceful shutdown** with Ctrl+C

### Usage:
```bash
# Start hot reload server
python scripts/dev.py dev-server

# The server will watch these directories:
# - . (root)
# - config/
# - database/
# - components/
# - data/
# - strategies/
# - trader/
```

## Data Persistence

### Database Persistence
✅ **PostgreSQL data persists** across container restarts
- Volume: `postgres_data` mounted to `/var/lib/postgresql/data`
- Data survives `docker-compose down` and `docker-compose up`

### Redis Persistence
✅ **Redis data persists** with AOF (Append-Only File)
- Volume: `redis_data` mounted to `/data`
- AOF sync every second for durability
- Data survives container restarts

### Removing Persistent Data
```bash
# Stop services and remove volumes (CAUTION: This deletes all data)
docker-compose down -v

# Or remove specific volumes
docker volume rm dashboard_postgres_data
docker volume rm dashboard_redis_data
```

## Dependency Management

### Adding New Dependencies

```bash
# Add runtime dependency
uv add "package-name>=1.0.0"

# Add development dependency
uv add --dev "dev-package>=1.0.0"

# Install all dependencies
uv sync --dev
```

### Key Dependencies Included:
- **Web Framework**: Dash, Plotly
- **Database**: SQLAlchemy, psycopg2-binary, Alembic
- **Data Processing**: pandas, numpy
- **Configuration**: pydantic, python-dotenv
- **Development**: watchdog (hot reload), pytest, black, mypy

See `docs/dependency-management.md` for detailed dependency management guide.

## Directory Structure

```
Dashboard/
├── config/                 # Configuration files
│   ├── settings.py         # Application settings
│   └── bot_configs/        # Bot configuration files
├── database/               # Database related files
│   └── init/               # Database initialization scripts
├── scripts/                # Development scripts
│   ├── dev.py              # Main development script
│   ├── setup.sh            # Setup script (Unix)
│   ├── start.sh            # Start script (Unix)
│   └── stop.sh             # Stop script (Unix)
├── tests/                  # Test files
│   └── test_setup.py       # Setup verification tests
├── docs/                   # Documentation
│   ├── setup.md           # This file
│   └── dependency-management.md  # Dependency guide
├── docker-compose.yml      # Docker services configuration
├── env.template            # Environment variables template
├── pyproject.toml          # Dependencies and project config
└── main.py                 # Main application entry point
```

## Services

### PostgreSQL Database
- **Host**: localhost:5432
- **Database**: dashboard
- **User**: dashboard  
- **Password**: dashboard123 (development only)
- **Persistence**: ✅ Data persists across restarts

### Redis Cache
- **Host**: localhost:6379
- **No password** (development only)
- **Persistence**: ✅ AOF enabled, data persists across restarts

## Environment Variables

Key environment variables (see `env.template` for full list):

- `DATABASE_URL` - PostgreSQL connection string
- `OKX_API_KEY` - OKX API key
- `OKX_SECRET_KEY` - OKX secret key
- `OKX_PASSPHRASE` - OKX passphrase
- `OKX_SANDBOX` - Use OKX sandbox (true/false)
- `DEBUG` - Enable debug mode
- `LOG_LEVEL` - Logging level (DEBUG, INFO, WARNING, ERROR)

## Troubleshooting

### Docker Issues

1. **Docker not running**: Start Docker Desktop/Engine
2. **Port conflicts**: Check if ports 5432 or 6379 are already in use
3. **Permission issues**: On Linux, add your user to the docker group
4. **Data persistence issues**: Check if volumes are properly mounted

### Database Connection Issues

1. **Connection refused**: Ensure PostgreSQL container is running
2. **Authentication failed**: Check credentials in `.env` file
3. **Database doesn't exist**: Run the setup script again
4. **Data loss**: Check if volume is mounted correctly

### Dependency Issues

1. **Import errors**: Run `uv sync --dev` to install dependencies
2. **Version conflicts**: Check `pyproject.toml` for compatibility
3. **Hot reload not working**: Ensure `watchdog` is installed

### Hot Reload Issues

1. **Changes not detected**: Check if files are in watched directories
2. **Rapid restarts**: Built-in 1-second debouncing should prevent this
3. **Process not stopping**: Use Ctrl+C to gracefully shutdown

## Performance Tips

1. **Use SSD**: Store Docker volumes on SSD for better database performance
2. **Increase Docker memory**: Allocate more RAM to Docker Desktop
3. **Hot reload**: Use `dev-server` for faster development cycles
4. **Dependency caching**: UV caches dependencies for faster installs

## Next Steps

After successful setup:

1. **Phase 1.0**: Database Infrastructure Setup
2. **Phase 2.0**: Bot Management System Development  
3. **Phase 3.0**: OKX Integration and Data Pipeline
4. **Phase 4.0**: Dashboard UI and Visualization
5. **Phase 5.0**: Backtesting System Implementation

See `tasks/tasks-prd-crypto-bot-dashboard.md` for detailed task list. 

