#!/usr/bin/env python3
"""
API endpoint to serve real-time order book data from the database.
"""

from flask import Flask, jsonify
from flask_cors import CORS
import sqlite3
from pathlib import Path
from datetime import datetime

app = Flask(__name__)
CORS(app)

DATABASE = Path('/home/ubuntu/.hermes/workspace/projects/ORDER_FLOW_GRAPH/data/binance_multi_asset.db')

def get_latest_order_book(symbol):
    """Get the latest order book snapshot from the database."""
    try:
        conn = sqlite3.connect(DATABASE, timeout=10.0)
        conn.text_factory = str
        cursor = conn.cursor()
        
        # Get the latest snapshot ID for this symbol
        cursor.execute("""
            SELECT id, timestamp
            FROM order_book_snapshots
            WHERE symbol = ?
            ORDER BY id DESC
            LIMIT 1
        """, (symbol.upper(),))
        
        snapshot = cursor.fetchone()
        if not snapshot:
            return None
        
        snapshot_id, timestamp = snapshot
        
        # Get all order book levels for this snapshot
        cursor.execute("""
            SELECT price, amount, side
            FROM order_book_levels
            WHERE snapshot_id = ?
            ORDER BY price
        """, (snapshot_id,))
        
        levels = cursor.fetchall()
        conn.close()
        
        # Organize into bids and asks
        bids = {}
        asks = {}
        
        for price, amount, side in levels:
            price_key = f"{price:.2f}"
            if side == 'bid':
                bids[price_key] = amount
            elif side == 'ask':
                asks[price_key] = amount
        
        return {
            'symbol': symbol.upper(),
            'timestamp': timestamp,
            'bids': bids,
            'asks': asks,
            'snapshot_id': snapshot_id
        }
        
    except Exception as e:
        print(f"Error fetching order book: {e}")
        return None

@app.route('/api/orderbook/<symbol>')
def get_orderbook(symbol):
    """API endpoint to get latest order book for a symbol."""
    data = get_latest_order_book(symbol)
    
    if data:
        return jsonify({
            'success': True,
            'data': data
        })
    else:
        return jsonify({
            'success': False,
            'error': 'No data available'
        }), 404

@app.route('/health')
def health():
    """Health check endpoint."""
    return jsonify({'status': 'healthy', 'timestamp': datetime.now().isoformat()})

if __name__ == '__main__':
    print("🚀 Starting Order Book API server...")
    print(f"📊 Database: {DATABASE}")
    print("🌐 Server running on http://0.0.0.0:5001")
    app.run(host='0.0.0.0', port=5001, debug=False)