"""Sample data generators for testing."""

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from faker import Faker

fake = Faker()


def generate_ohlcv_data(
    symbol: str = "BTC/USD",
    periods: int = 100,
    start_price: float = 50000.0,
    timeframe: str = "1h"
) -> pd.DataFrame:
    """Generate sample OHLCV data.
    
    Args:
        symbol: Trading pair
        periods: Number of periods
        start_price: Starting price
        timeframe: Data timeframe
        
    Returns:
        DataFrame with OHLCV data
    """
    dates = pd.date_range(
        start=datetime.now() - timedelta(hours=periods),
        periods=periods,
        freq=timeframe
    )
    
    # Generate realistic price movement
    prices = [start_price]
    for i in range(1, periods):
        change = np.random.randn() * 0.02  # 2% volatility
        prices.append(prices[-1] * (1 + change))
    
    return pd.DataFrame({
        'timestamp': dates,
        'open': prices,
        'high': [p * 1.01 for p in prices],
        'low': [p * 0.99 for p in prices],
        'close': prices,
        'volume': [1000.0 + np.random.randn() * 100 for _ in range(periods)]
    })


def generate_trade_data(
    symbol: str = "BTC/USD",
    count: int = 10
) -> list:
    """Generate sample trade data.
    
    Args:
        symbol: Trading pair
        count: Number of trades
        
    Returns:
        List of trade dictionaries
    """
    trades = []
    base_price = 50000.0
    
    for i in range(count):
        trades.append({
            'order_id': f'trade_{i}',
            'symbol': symbol,
            'side': 'buy' if i % 2 == 0 else 'sell',
            'type': 'market',
            'price': base_price + np.random.randn() * 100,
            'amount': 0.01,
            'cost': 500.0,
            'fee': 0.5,
            'status': 'filled',
            'timestamp': datetime.now() - timedelta(hours=count-i)
        })
    
    return trades

