from fastapi import APIRouter, Depends, Query
from sqlalchemy.ext.asyncio import AsyncSession

from app.database import get_db
from app.analytics.performance import performance_engine

router = APIRouter(prefix="/api/v1/analytics", tags=["analytics"])


@router.get("/global")
async def global_stats(db: AsyncSession = Depends(get_db)):
    """Overall bot performance metrics."""
    stats = await performance_engine.get_global_stats(db)
    return stats


@router.get("/strategies")
async def strategy_stats(db: AsyncSession = Depends(get_db)):
    """Per-strategy performance breakdown."""
    stats = await performance_engine.get_strategy_stats(db)
    return {"strategies": stats}


@router.get("/pairs")
async def pair_stats(db: AsyncSession = Depends(get_db)):
    """Per-pair performance breakdown."""
    stats = await performance_engine.get_pair_stats(db)
    return {"pairs": stats}


@router.get("/time")
async def time_stats(
    period: str = Query("DAILY", description="DAILY | WEEKLY | MONTHLY"),
    db: AsyncSession = Depends(get_db),
):
    """Time-bucketed performance statistics."""
    valid = ("DAILY", "WEEKLY", "MONTHLY")
    if period.upper() not in valid:
        from fastapi import HTTPException
        raise HTTPException(status_code=400, detail=f"period must be one of {valid}")
    stats = await performance_engine.get_time_stats(db, period.upper())
    return {"period": period.upper(), "data": stats}
