"""AI Signal Intelligence Endpoints."""
from __future__ import annotations

from typing import Any

from fastapi import APIRouter, Query

from backend.app.database.session import db_manager
from backend.app.market_data.feed_manager import feed_manager
from backend.app.monitoring.metrics import metrics_collector
from backend.app.strategy.signal_engine import signal_engine

router = APIRouter(prefix="/signals", tags=["Signals"])


@router.get("/latest")
async def get_latest_signal(symbol: str = Query("BTCUSDT")) -> dict[str, Any]:
    """Generate or retrieve current AI market signal for a symbol."""
    candles = feed_manager.fetch_klines(symbol, "15m", 150)
    ticker = feed_manager.fetch_ticker(symbol)
    signal = signal_engine.generate_signal(candles, ticker)
    metrics_collector.record_signal(approved=signal.action.value != "NO_TRADE")

    return {
        "symbol": signal.symbol,
        "action": signal.action.value,
        "raw_probability": signal.raw_probability,
        "calibrated_probability": signal.calibrated_probability,
        "expected_return": signal.expected_return,
        "expected_risk": signal.expected_risk,
        "expected_value": signal.expected_value,
        "entry_price": float(signal.entry_price),
        "stop_loss_price": float(signal.stop_loss_price),
        "take_profit_price": float(signal.take_profit_price),
        "regime": signal.regime.value,
        "reason": signal.reason,
        "model_version": signal.model_version,
        "timestamp": signal.timestamp,
    }


@router.get("/history")
async def get_signal_history(limit: int = Query(50, ge=1, le=200)) -> list[dict[str, Any]]:
    """Retrieve historical signals and decisions."""
    return db_manager.execute_read_all(
        "SELECT * FROM signals ORDER BY timestamp DESC LIMIT ?", (limit,)
    )
