"""
Example usage of chart_utils.py plotting functions.

This demonstrates how the LLM can use the plot_ohlc() convenience function
in analyze_chart_data scripts to create beautiful, standard OHLC charts.
"""

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


def create_sample_data(days=30):
    """Create sample OHLCV data for testing."""
    dates = pd.date_range(end=datetime.now(), periods=days * 24, freq='1H')

    # Simulate price movement
    np.random.seed(42)
    close = 50000 + np.cumsum(np.random.randn(len(dates)) * 100)

    data = {
        'open': close + np.random.randn(len(dates)) * 50,
        'high': close + np.abs(np.random.randn(len(dates))) * 100,
        'low': close - np.abs(np.random.randn(len(dates))) * 100,
        'close': close,
        'volume': np.abs(np.random.randn(len(dates))) * 1000000
    }

    df = pd.DataFrame(data, index=dates)

    # Ensure high is highest and low is lowest
    df['high'] = df[['open', 'high', 'low', 'close']].max(axis=1)
    df['low'] = df[['open', 'high', 'low', 'close']].min(axis=1)

    return df


if __name__ == "__main__":
    from chart_utils import plot_ohlc, add_indicators_to_plot, plot_price_volume

    # Create sample data
    df = create_sample_data(days=30)

    print("=" * 60)
    print("Example 1: Basic OHLC chart with volume")
    print("=" * 60)
    print("\nScript the LLM would generate:")
    print("""
fig = plot_ohlc(df, title='BTC/USDT 1H', volume=True)
df.tail(5)
    """)

    # Execute it
    fig = plot_ohlc(df, title='BTC/USDT 1H', volume=True)
    print("\n✓ Chart created successfully!")
    print(f"  Figure size: {fig.get_size_inches()}")
    print(f"  Number of axes: {len(fig.axes)}")


    print("\n" + "=" * 60)
    print("Example 2: OHLC chart with indicators")
    print("=" * 60)
    print("\nScript the LLM would generate:")
    print("""
# Calculate indicators
df['SMA_20'] = df['close'].rolling(20).mean()
df['SMA_50'] = df['close'].rolling(50).mean()
df['EMA_12'] = df['close'].ewm(span=12, adjust=False).mean()

# Plot with indicators
fig = add_indicators_to_plot(
    df,
    indicators={
        'SMA_20': {'color': 'blue', 'width': 1.5},
        'SMA_50': {'color': 'red', 'width': 1.5},
        'EMA_12': {'color': 'green', 'width': 1.0}
    },
    title='BTC/USDT with Moving Averages',
    volume=True
)

df[['close', 'SMA_20', 'SMA_50', 'EMA_12']].tail(5)
    """)

    # Execute it
    df['SMA_20'] = df['close'].rolling(20).mean()
    df['SMA_50'] = df['close'].rolling(50).mean()
    df['EMA_12'] = df['close'].ewm(span=12, adjust=False).mean()

    fig = add_indicators_to_plot(
        df,
        indicators={
            'SMA_20': {'color': 'blue', 'width': 1.5},
            'SMA_50': {'color': 'red', 'width': 1.5},
            'EMA_12': {'color': 'green', 'width': 1.0}
        },
        title='BTC/USDT with Moving Averages',
        volume=True
    )

    print("\n✓ Chart with indicators created successfully!")
    print(f"  Last close: ${df['close'].iloc[-1]:,.2f}")
    print(f"  SMA 20: ${df['SMA_20'].iloc[-1]:,.2f}")
    print(f"  SMA 50: ${df['SMA_50'].iloc[-1]:,.2f}")


    print("\n" + "=" * 60)
    print("Example 3: Price-only chart (no volume)")
    print("=" * 60)
    print("\nScript the LLM would generate:")
    print("""
from chart_utils import plot_price_only

fig = plot_price_only(df, title='Clean Price Action')
    """)

    # Execute it
    from chart_utils import plot_price_only
    fig = plot_price_only(df, title='Clean Price Action')

    print("\n✓ Price-only chart created successfully!")


    print("\n" + "=" * 60)
    print("Summary")
    print("=" * 60)
    print("""
The chart_utils module provides:

1. plot_ohlc() - Main function for beautiful candlestick charts
   - Professional seaborn-inspired styling
   - Consistent color scheme (teal up, coral down)
   - Optional volume subplot
   - Customizable figure size

2. add_indicators_to_plot() - OHLC charts with technical indicators
   - Overlay multiple indicators
   - Customizable colors and line widths
   - Proper integration with mplfinance

3. Preset functions for common chart types:
   - plot_price_volume() - Standard price + volume
   - plot_price_only() - Candlesticks without volume

Benefits:
✓ Consistent look and feel across all charts
✓ Less code for the LLM to generate
✓ Professional appearance out of the box
✓ Easy to customize when needed
✓ Works seamlessly with analyze_chart_data tool

The LLM can now simply call plot_ohlc(df) instead of writing
custom matplotlib code for every chart request!
    """)
