"""Core SQLAlchemy models."""

from .base import BaseModel, SoftDeleteMixin, AuditMixin
from .asset import Asset, AssetType, AssetStatus
from .modeltype import ModelType
from .vendor import Vendor
from .model import Model
from .businessunit import BusinessUnit
from .dashboarddefault import DashboardDefault
from .location import Location, LocationType, derive_locationcode
from .maplevel import Building, MapLevel
from .mapsnapshot import MapPositionSnapshot
from .operatingsystem import OperatingSystem
from .relationship import AssetRelationship, RelationshipType, RelationshipTypePropagation
from .communication import Communication, CommunicationType
from .user import User, Role, Permission, full_permission_catalog
from .application import Application, AppVersion
from .supportteam import SupportTeam, SupportTeamContact
from .setting import Setting
from .auditlog import AuditLog
from .customfield import CustomField, CustomFieldValue
from .apitoken import ApiToken

__all__ = [
    # Base
    'BaseModel',
    'SoftDeleteMixin',
    'AuditMixin',
    # Asset (new architecture)
    'Asset',
    'AssetType',
    'AssetStatus',
    # Model-type lookup (referenced by models.modeltypeid)
    'ModelType',
    # Reference
    'Vendor',
    'Model',
    'BusinessUnit',
    'DashboardDefault',
    'Location',
    'LocationType',
    # Map model (ADR-017): which drawing renders an asset, at what size
    'Building',
    'MapLevel',
    'MapPositionSnapshot',
    'derive_locationcode',
    'OperatingSystem',
    # Relationships
    'AssetRelationship',
    'RelationshipType',
    'RelationshipTypePropagation',
    # Communication
    'Communication',
    'CommunicationType',
    # Auth
    'User',
    'Role',
    'Permission',
    'full_permission_catalog',
    # Applications
    'Application',
    'AppVersion',
    # Support teams
    'SupportTeam',
    'SupportTeamContact',
    # Knowledge Base
    # Settings
    'Setting',
    # Audit
    'AuditLog',
    # Custom fields
    'CustomField',
    'CustomFieldValue',
    # Personal API tokens
    'ApiToken',
]
