import logging from datetime import datetime from typing import List, Optional from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query from sqlalchemy import func from sqlalchemy.orm import Session from app.api.deps import get_current_user from app.core.database import get_db from app.services.stats_service import stats_service from app.tasks.background_tasks import process_marketplace_import from middleware.decorators import rate_limit from models.api_models import (MarketplaceImportJobResponse, MarketplaceImportRequest, MarketplaceStatsResponse, StatsResponse) from models.database_models import (MarketplaceImportJob, Product, Shop, Stock, User) router = APIRouter() logger = logging.getLogger(__name__) # Enhanced Statistics with Marketplace Support @router.get("/stats", response_model=StatsResponse) def get_stats( db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """Get comprehensive statistics with marketplace data (Protected)""" try: stats_data = stats_service.get_comprehensive_stats(db=db) return StatsResponse( total_products=stats_data["total_products"], unique_brands=stats_data["unique_brands"], unique_categories=stats_data["unique_categories"], unique_marketplaces=stats_data["unique_marketplaces"], unique_shops=stats_data["unique_shops"], total_stock_entries=stats_data["total_stock_entries"], total_inventory_quantity=stats_data["total_inventory_quantity"], ) except Exception as e: logger.error(f"Error getting comprehensive stats: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") @router.get("/stats/marketplace", response_model=List[MarketplaceStatsResponse]) def get_marketplace_stats( db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """Get statistics broken down by marketplace (Protected)""" try: marketplace_stats = stats_service.get_marketplace_breakdown_stats(db=db) return [ MarketplaceStatsResponse( marketplace=stat["marketplace"], total_products=stat["total_products"], unique_shops=stat["unique_shops"], unique_brands=stat["unique_brands"], ) for stat in marketplace_stats ] except Exception as e: logger.error(f"Error getting marketplace stats: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error")