"""In-memory orderbook engine for Turbo prediction markets."""

import random
from dataclasses import dataclass, field

PRICE_SCALE = 1_000_000
OB_LEVELS = 5


@dataclass
class Level:
    price: int  # 6 decimals (500000 = 50c)
    size: float  # shares


@dataclass
class OrderBook:
    bids: list[Level] = field(default_factory=list)  # highest first
    asks: list[Level] = field(default_factory=list)  # lowest first


def generate_mock_book(mid: float, spread_cents: int = 3) -> OrderBook:
    """Generate a mock orderbook around a midpoint probability (0-1)."""
    mid_price = int(mid * PRICE_SCALE)
    half_spread = int(spread_cents * PRICE_SCALE / 200)

    bids = []
    asks = []
    for i in range(OB_LEVELS):
        bp = mid_price - half_spread - i * 5000
        ap = mid_price + half_spread + i * 5000
        if bp > 0:
            bids.append(Level(price=bp, size=round(random.uniform(1, 10), 1)))
        if ap < PRICE_SCALE:
            asks.append(Level(price=ap, size=round(random.uniform(1, 10), 1)))
    return OrderBook(bids=bids, asks=asks)


def book_to_dict(book: OrderBook) -> dict:
    return {
        "bids": [{"price": l.price, "size": l.size} for l in book.bids[:OB_LEVELS]],
        "asks": [{"price": l.price, "size": l.size} for l in book.asks[:OB_LEVELS]],
    }
