"""
=========================================
CV6 AI Learning Engine — FastAPI Router
Exposes analytics derived from trade data
=========================================
"""

from fastapi import APIRouter, HTTPException, Query
from pydantic import BaseModel
from typing import Any, Dict, List, Optional

from app.learning.learning_service import learning_service

router = APIRouter(prefix="/learning", tags=["Learning"])


# ── Schemas ────────────────────────────────────────────────────────────────────

class TradeRecordIn(BaseModel):
    symbol:          str
    sector:          Optional[str]  = "Other"
    style:           Optional[str]  = "INTRADAY"
    broker:          Optional[str]  = ""
    side:            Optional[str]  = "BUY"
    qty:             Optional[int]  = 0
    entry_price:     Optional[float] = 0.0
    exit_price:      Optional[float] = 0.0
    stop_loss:       Optional[float] = 0.0
    target_price:    Optional[float] = 0.0
    pnl:             Optional[float] = 0.0
    pnl_pct:         Optional[float] = 0.0
    entry_time:      Optional[str]   = ""
    exit_time:       Optional[str]   = ""
    holding_minutes: Optional[float] = 0.0
    exit_reason:     Optional[str]   = "MANUAL"
    strategy:        Optional[str]   = ""
    ai_models_used:  Optional[str]   = ""
    ai_signal:       Optional[str]   = ""
    ai_confidence:   Optional[float] = 0.0
    ai_correct:      Optional[bool]  = False
    ai_reason:       Optional[str]   = ""
    from_cache:      Optional[bool]  = False
    market_regime:   Optional[str]   = "UNKNOWN"
    nifty_pct:       Optional[float] = 0.0
    vix:             Optional[float] = 0.0
    news_sentiment:  Optional[str]   = "NEUTRAL"
    slippage_pct:    Optional[float] = 0.0
    mode:            Optional[str]   = "PAPER"
    indicators:      Optional[dict]  = None


# ── Routes ─────────────────────────────────────────────────────────────────────

@router.post("/record")
def record_trade(body: TradeRecordIn) -> dict:
    """Record a completed trade from the autonomous engine."""
    trade_id = learning_service.record_trade(body.dict())
    if not trade_id:
        raise HTTPException(status_code=500, detail="Failed to record trade")
    return {"ok": True, "trade_id": trade_id}


@router.get("/stats")
def get_stats() -> dict:
    """Overall performance: win rate, P&L, drawdown, profit factor."""
    return learning_service.get_stats()


@router.get("/strategy")
def get_strategy_stats() -> List[dict]:
    """Performance broken down by strategy."""
    return learning_service.get_strategy_stats()


@router.get("/style")
def get_style_stats() -> List[dict]:
    """Performance broken down by trading style (INTRADAY/SWING/FNO…)."""
    return learning_service.get_style_stats()


@router.get("/ai")
def get_ai_accuracy() -> List[dict]:
    """AI model accuracy, confidence, cache hit rate."""
    return learning_service.get_ai_accuracy()


@router.get("/time")
def get_time_analysis() -> List[dict]:
    """Win rate and average P&L per hour of day."""
    return learning_service.get_time_analysis()


@router.get("/sector")
def get_sector_stats() -> List[dict]:
    """Win rate and P&L per sector."""
    return learning_service.get_sector_stats()


@router.get("/monthly")
def get_monthly_report(
    year:  int = Query(..., description="4-digit year, e.g. 2025"),
    month: int = Query(..., ge=1, le=12, description="Month 1-12"),
) -> dict:
    """Full stats for a specific year/month."""
    return learning_service.get_monthly_report(year=year, month=month)


@router.get("/monthly/series")
def get_monthly_series() -> List[dict]:
    """All-time monthly P&L series."""
    return learning_service.get_monthly_series()


@router.get("/suggestions")
def get_suggestions() -> List[dict]:
    """Auto-generated improvement suggestions from trade patterns."""
    return learning_service.get_suggestions()


@router.get("/recent")
def get_recent_trades(limit: int = Query(50, ge=1, le=500)) -> List[dict]:
    """Recent completed trades."""
    return learning_service.get_recent_trades(limit=limit)
