# app/api/v1/vendor/dashboard.py
"""
Vendor dashboard and statistics endpoints.

Vendor Context: Uses token_vendor_id from JWT token (authenticated vendor API pattern).
The get_current_vendor_api dependency guarantees token_vendor_id is present.
"""

import logging

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

from app.api.deps import get_current_vendor_api
from app.core.database import get_db
from app.exceptions import VendorNotActiveException
from app.services.stats_service import stats_service
from app.services.vendor_service import vendor_service
from models.database.user import User

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


@router.get("/stats")
def get_vendor_dashboard_stats(
    request: Request,
    current_user: User = Depends(get_current_vendor_api),
    db: Session = Depends(get_db),
):
    """
    Get vendor-specific dashboard statistics.

    Returns statistics for the current vendor only:
    - Total products in catalog
    - Total orders
    - Total customers
    - Revenue metrics

    Vendor is determined from the JWT token (vendor_id claim).
    Requires Authorization header (API endpoint).
    """
    vendor_id = current_user.token_vendor_id

    # Get vendor object (raises VendorNotFoundException if not found)
    vendor = vendor_service.get_vendor_by_id(db, vendor_id)

    if not vendor.is_active:
        raise VendorNotActiveException(vendor.vendor_code)

    # Get vendor-scoped statistics
    stats_data = stats_service.get_vendor_stats(db=db, vendor_id=vendor_id)

    return {
        "vendor": {
            "id": vendor.id,
            "name": vendor.name,
            "vendor_code": vendor.vendor_code,
        },
        "products": {
            "total": stats_data.get("total_products", 0),
            "active": stats_data.get("active_products", 0),
        },
        "orders": {
            "total": stats_data.get("total_orders", 0),
            "pending": stats_data.get("pending_orders", 0),
            "completed": stats_data.get("completed_orders", 0),
        },
        "customers": {
            "total": stats_data.get("total_customers", 0),
            "active": stats_data.get("active_customers", 0),
        },
        "revenue": {
            "total": stats_data.get("total_revenue", 0),
            "this_month": stats_data.get("revenue_this_month", 0),
        },
    }
