# app/modules/orders/services/order_widgets.py
"""
Orders dashboard widget provider.

Provides storefront dashboard cards for order-related data.
Implements get_storefront_dashboard_cards from DashboardWidgetProviderProtocol.
"""

import logging

from sqlalchemy.orm import Session

from app.modules.contracts.widgets import (
    DashboardWidget,
    StorefrontDashboardCard,
    WidgetContext,
)

logger = logging.getLogger(__name__)


class OrderWidgetProvider:
    """Widget provider for orders module."""

    @property
    def widgets_category(self) -> str:
        return "orders"

    def get_store_widgets(
        self,
        db: Session,
        store_id: int,
        context: WidgetContext | None = None,
    ) -> list[DashboardWidget]:
        return []

    def get_platform_widgets(
        self,
        db: Session,
        platform_id: int,
        context: WidgetContext | None = None,
    ) -> list[DashboardWidget]:
        return []

    def get_storefront_dashboard_cards(
        self,
        db: Session,
        store_id: int,
        customer_id: int,
        context: WidgetContext | None = None,
    ) -> list[StorefrontDashboardCard]:
        """Provide the Orders card for the customer dashboard."""
        from app.modules.orders.models.customer_order_stats import CustomerOrderStats

        stats = (
            db.query(CustomerOrderStats)
            .filter(
                CustomerOrderStats.store_id == store_id,
                CustomerOrderStats.customer_id == customer_id,
            )
            .first()
        )

        total_orders = stats.total_orders if stats else 0

        return [
            StorefrontDashboardCard(
                key="orders.summary",
                icon="shopping-bag",
                title="Orders",
                subtitle="View order history",
                route="account/orders",
                value=total_orders,
                value_label="Total Orders",
                order=10,
            ),
        ]


order_widget_provider = OrderWidgetProvider()
