# app/modules/tenancy/models/__init__.py
"""
Tenancy module database models.

This is the canonical location for tenancy module models including:
- Platform, Merchant, Store, User management
- Admin platform assignments
- Store platform memberships
- Platform module configuration
- Store domains
"""

# Import models from other modules FIRST to resolve string-based relationship references.
# These imports are NOT re-exported, just ensure models are registered with SQLAlchemy
# before the tenancy models are loaded.
#
# Relationship being resolved:
# - Platform.admin_menu_configs -> "AdminMenuConfig" (in core module)
#
# NOTE: MarketplaceImportJob relationships have been moved to the marketplace module.
# Optional modules own their relationships to core models, not vice versa.
from app.modules.core.models import AdminMenuConfig  # noqa: F401
from app.modules.tenancy.models.admin import (
    AdminAuditLog,
    AdminSession,
    AdminSetting,
    ApplicationLog,
    PlatformAlert,
)
from app.modules.tenancy.models.admin_platform import AdminPlatform
from app.modules.tenancy.models.email_verification_token import EmailVerificationToken
from app.modules.tenancy.models.merchant import Merchant
from app.modules.tenancy.models.merchant_domain import MerchantDomain
from app.modules.tenancy.models.platform import Platform
from app.modules.tenancy.models.platform_module import PlatformModule
from app.modules.tenancy.models.store import Role, Store, StoreUser
from app.modules.tenancy.models.store_domain import StoreDomain
from app.modules.tenancy.models.store_platform import StorePlatform
from app.modules.tenancy.models.user import User, UserRole
from app.modules.tenancy.models.user_password_reset_token import UserPasswordResetToken

__all__ = [
    # Admin models
    "AdminAuditLog",
    "AdminSession",
    "AdminSetting",
    "ApplicationLog",
    "PlatformAlert",
    # Admin-Platform junction
    "AdminPlatform",
    # Merchant
    "Merchant",
    # Platform
    "Platform",
    "PlatformModule",
    # User
    "User",
    "UserRole",
    # Tokens
    "EmailVerificationToken",
    "UserPasswordResetToken",
    # Store
    "Store",
    "StoreUser",
    "Role",
    # Merchant configuration
    "MerchantDomain",
    # Store configuration
    "StoreDomain",
    "StorePlatform",
]
