# app/modules/marketplace/services/marketplace_features.py
"""
Marketplace feature provider for the billing feature system.

Declares marketplace-related billable features (letzshop sync, API access,
webhooks, custom integrations) for feature gating.
"""

from __future__ import annotations

import logging
from typing import TYPE_CHECKING

from app.modules.contracts.features import (
    FeatureDeclaration,
    FeatureScope,
    FeatureType,
    FeatureUsage,
)

if TYPE_CHECKING:
    from sqlalchemy.orm import Session

logger = logging.getLogger(__name__)


class MarketplaceFeatureProvider:
    """Feature provider for the marketplace module.

    Declares:
    - letzshop_sync: binary merchant-level feature for Letzshop synchronization
    - api_access: binary merchant-level feature for API access
    - webhooks: binary merchant-level feature for webhook integrations
    - custom_integrations: binary merchant-level feature for custom integrations
    """

    @property
    def feature_category(self) -> str:
        return "marketplace"

    def get_feature_declarations(self) -> list[FeatureDeclaration]:
        return [
            FeatureDeclaration(
                code="letzshop_sync",
                name_key="marketplace.features.letzshop_sync.name",
                description_key="marketplace.features.letzshop_sync.description",
                category="marketplace",
                feature_type=FeatureType.BINARY,
                scope=FeatureScope.MERCHANT,
                ui_icon="refresh-cw",
                display_order=10,
            ),
            FeatureDeclaration(
                code="api_access",
                name_key="marketplace.features.api_access.name",
                description_key="marketplace.features.api_access.description",
                category="marketplace",
                feature_type=FeatureType.BINARY,
                scope=FeatureScope.MERCHANT,
                ui_icon="terminal",
                display_order=20,
            ),
            FeatureDeclaration(
                code="webhooks",
                name_key="marketplace.features.webhooks.name",
                description_key="marketplace.features.webhooks.description",
                category="marketplace",
                feature_type=FeatureType.BINARY,
                scope=FeatureScope.MERCHANT,
                ui_icon="webhook",
                display_order=30,
            ),
            FeatureDeclaration(
                code="custom_integrations",
                name_key="marketplace.features.custom_integrations.name",
                description_key="marketplace.features.custom_integrations.description",
                category="marketplace",
                feature_type=FeatureType.BINARY,
                scope=FeatureScope.MERCHANT,
                ui_icon="puzzle",
                display_order=40,
            ),
        ]

    def get_store_usage(
        self,
        db: Session,
        store_id: int,
    ) -> list[FeatureUsage]:
        return []

    def get_merchant_usage(
        self,
        db: Session,
        merchant_id: int,
        platform_id: int,
    ) -> list[FeatureUsage]:
        return []


# Singleton instance for module registration
marketplace_feature_provider = MarketplaceFeatureProvider()

__all__ = [
    "MarketplaceFeatureProvider",
    "marketplace_feature_provider",
]
