"""
CV6 AI Trading OS
Execution Router
H-4 FIX: All execution endpoints now require JWT authentication.
"""

from typing import Optional
from fastapi import APIRouter, Depends

from app.execution.execution_engine import ExecutionEngine
from app.execution.execution_models import (
    ExecutionRequest,
    ExecutionResponse,
    TradeExecutionRequest,
)
from app.core.dependencies import get_current_user

router = APIRouter(
    prefix="/execution",
    tags=["Execution"],
)

engine = ExecutionEngine()


@router.post(
    "/place-order",
    response_model=ExecutionResponse,
)
async def place_order(request: ExecutionRequest, _user=Depends(get_current_user)):
    import asyncio
    return await asyncio.to_thread(engine.execute, request)


@router.post("/execute-trade")
def execute_trade(request: TradeExecutionRequest, _user=Depends(get_current_user)):

    return engine.execute_trade(
        broker=request.broker,
        symbol=request.symbol,
        exchange=request.exchange,
        capital=request.capital,
        risk_percent=request.risk_percent,
        entry_price=request.entry_price,
        stop_loss=request.stop_loss,
        target_price=request.target_price,
        ema=request.ema,
        rsi=request.rsi,
        macd=request.macd,
        supertrend=request.supertrend,
        atr=request.atr,
        vwap=request.vwap,
        strategy=request.strategy,
        confidence=request.confidence,
    )


@router.post("/modify-order")
def modify_order(
    broker: str,
    order_id: str,
    price: Optional[float] = None,
    quantity: Optional[int] = None,
    _user=Depends(get_current_user),
):

    return engine.modify_order(
        broker=broker,
        order_id=order_id,
        price=price,
        quantity=quantity,
    )


@router.post("/cancel-order")
def cancel_order(
    broker: str,
    order_id: str,
    _user=Depends(get_current_user),
):

    return engine.cancel_order(
        broker=broker,
        order_id=order_id,
    )


@router.get("/orders")
def order_book(
    broker: str,
    _user=Depends(get_current_user),
):

    return engine.order_book(
        broker=broker,
    )