from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.core.database import get_db from app.dependencies.auth import get_current_admin from app.models.user import User from app.schemas.admin import ( DashboardSummary, OrdersPerStatus, SalesOverTime, SalesSummary, TimePeriod, TopCategorySales, TopCustomerSales, TopProductSales, ) from app.services.admin import AdminDashboardService router = APIRouter() @router.get("/dashboard", response_model=DashboardSummary) async def get_dashboard_summary( db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get a summary of key metrics for the admin dashboard. """ return AdminDashboardService.get_dashboard_summary(db) @router.get("/sales/summary", response_model=SalesSummary) async def get_sales_summary( period: TimePeriod = TimePeriod.LAST_30_DAYS, db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get sales summary for a specific time period. """ return AdminDashboardService.get_sales_summary(db, period) @router.get("/sales/over-time", response_model=SalesOverTime) async def get_sales_over_time( period: TimePeriod = TimePeriod.LAST_30_DAYS, db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get sales data over time for a specific period. """ return AdminDashboardService.get_sales_over_time(db, period) @router.get("/sales/top-categories", response_model=TopCategorySales) async def get_top_categories( period: TimePeriod = TimePeriod.LAST_30_DAYS, limit: int = Query(5, ge=1, le=50), db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get top selling categories for a specific period. """ return AdminDashboardService.get_top_categories(db, period, limit) @router.get("/sales/top-products", response_model=TopProductSales) async def get_top_products( period: TimePeriod = TimePeriod.LAST_30_DAYS, limit: int = Query(5, ge=1, le=50), db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get top selling products for a specific period. """ return AdminDashboardService.get_top_products(db, period, limit) @router.get("/sales/top-customers", response_model=TopCustomerSales) async def get_top_customers( period: TimePeriod = TimePeriod.LAST_30_DAYS, limit: int = Query(5, ge=1, le=50), db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get top customers for a specific period. """ return AdminDashboardService.get_top_customers(db, period, limit) @router.get("/orders/by-status", response_model=list[OrdersPerStatus]) async def get_orders_by_status( db: Session = Depends(get_db), current_user: User = Depends(get_current_admin) ): """ Get order counts by status. """ return AdminDashboardService.get_orders_by_status(db)