# app/api/v1/admin/dashboard.py
"""
Admin dashboard and statistics endpoints.
"""

import logging

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

from app.api.deps import get_current_admin_api
from app.core.database import get_db
from app.services.admin_service import admin_service
from app.services.stats_service import stats_service
from models.database.user import User
from models.schema.stats import (
    AdminDashboardResponse,
    ImportStatsResponse,
    MarketplaceStatsResponse,
    OrderStatsBasicResponse,
    PlatformStatsResponse,
    ProductStatsResponse,
    StatsResponse,
    UserStatsResponse,
    VendorStatsResponse,
)

router = APIRouter(prefix="/dashboard")
logger = logging.getLogger(__name__)


@router.get("", response_model=AdminDashboardResponse)
def get_admin_dashboard(
    db: Session = Depends(get_db),
    current_admin: User = Depends(get_current_admin_api),
):
    """Get admin dashboard with platform statistics (Admin only)."""
    user_stats = stats_service.get_user_statistics(db)
    vendor_stats = stats_service.get_vendor_statistics(db)

    return AdminDashboardResponse(
        platform={
            "name": "Multi-Tenant Ecommerce Platform",
            "version": "1.0.0",
        },
        users=UserStatsResponse(**user_stats),
        vendors=VendorStatsResponse(
            total=vendor_stats.get("total", vendor_stats.get("total_vendors", 0)),
            verified=vendor_stats.get(
                "verified", vendor_stats.get("verified_vendors", 0)
            ),
            pending=vendor_stats.get("pending", vendor_stats.get("pending_vendors", 0)),
            inactive=vendor_stats.get(
                "inactive", vendor_stats.get("inactive_vendors", 0)
            ),
        ),
        recent_vendors=admin_service.get_recent_vendors(db, limit=5),
        recent_imports=admin_service.get_recent_import_jobs(db, limit=10),
    )


@router.get("/stats", response_model=StatsResponse)
def get_comprehensive_stats(
    db: Session = Depends(get_db),
    current_admin: User = Depends(get_current_admin_api),
):
    """Get comprehensive platform statistics (Admin only)."""
    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_vendors=stats_data["unique_vendors"],
        total_inventory_entries=stats_data["total_inventory_entries"],
        total_inventory_quantity=stats_data["total_inventory_quantity"],
    )


@router.get("/stats/marketplace", response_model=list[MarketplaceStatsResponse])
def get_marketplace_stats(
    db: Session = Depends(get_db),
    current_admin: User = Depends(get_current_admin_api),
):
    """Get statistics broken down by marketplace (Admin only)."""
    marketplace_stats = stats_service.get_marketplace_breakdown_stats(db=db)

    return [
        MarketplaceStatsResponse(
            marketplace=stat["marketplace"],
            total_products=stat["total_products"],
            unique_vendors=stat["unique_vendors"],
            unique_brands=stat["unique_brands"],
        )
        for stat in marketplace_stats
    ]


@router.get("/stats/platform", response_model=PlatformStatsResponse)
def get_platform_statistics(
    db: Session = Depends(get_db),
    current_admin: User = Depends(get_current_admin_api),
):
    """Get comprehensive platform statistics (Admin only)."""
    user_stats = stats_service.get_user_statistics(db)
    vendor_stats = stats_service.get_vendor_statistics(db)
    product_stats = stats_service.get_product_statistics(db)
    order_stats = stats_service.get_order_statistics(db)
    import_stats = stats_service.get_import_statistics(db)

    return PlatformStatsResponse(
        users=UserStatsResponse(**user_stats),
        vendors=VendorStatsResponse(
            total=vendor_stats.get("total", vendor_stats.get("total_vendors", 0)),
            verified=vendor_stats.get(
                "verified", vendor_stats.get("verified_vendors", 0)
            ),
            pending=vendor_stats.get("pending", vendor_stats.get("pending_vendors", 0)),
            inactive=vendor_stats.get(
                "inactive", vendor_stats.get("inactive_vendors", 0)
            ),
        ),
        products=ProductStatsResponse(**product_stats),
        orders=OrderStatsBasicResponse(**order_stats),
        imports=ImportStatsResponse(**import_stats),
    )
