# app/modules/billing/__init__.py
"""
Billing Module - Subscription and payment management.

This module provides:
- Merchant-level subscription management (per merchant per platform)
- Subscription tier management with TierFeatureLimit
- Billing history and invoices
- Stripe integration
- Scheduled tasks for subscription lifecycle

Routes:
- Admin: /api/v1/admin/subscriptions/*
- Store: /api/v1/store/billing/*
- Merchant: /api/v1/merchants/billing/*

Menu Items:
- Admin: subscription-tiers, subscriptions, billing-history
- Store: billing, invoices

Usage:
    from app.modules.billing import billing_module
    from app.modules.billing.services import subscription_service, stripe_service
    from app.modules.billing.models import MerchantSubscription, SubscriptionTier
    from app.modules.billing.exceptions import TierLimitExceededException
"""

# Lazy imports to avoid circular dependencies
# Routers and module definition are imported on-demand

__all__ = [
    "billing_module",
    "get_billing_module_with_routers",
]


def __getattr__(name: str):
    """Lazy import to avoid circular dependencies."""
    if name == "billing_module":
        from app.modules.billing.definition import billing_module
        return billing_module
    if name == "get_billing_module_with_routers":
        from app.modules.billing.definition import get_billing_module_with_routers
        return get_billing_module_with_routers
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
