"""A python library for interacting with the SmartThings cloud API."""

from .app import (
    APP_TYPE_LAMBDA,
    APP_TYPE_WEBHOOK,
    CLASSIFICATION_AUTOMATION,
    App,
    AppEntity,
    AppOAuth,
    AppOAuthClient,
    AppOAuthClientEntity,
    AppOAuthEntity,
    AppSettings,
    AppSettingsEntity,
)
from .capability import (
    ATTRIBUTES,
    CAPABILITIES,
    CAPABILITIES_TO_ATTRIBUTES,
    Attribute,
    Capability,
)
from .const import __title__, __version__  # noqa
from .device import (
    DEVICE_TYPE_DTH,
    DEVICE_TYPE_ENDPOINT_APP,
    DEVICE_TYPE_OCF,
    DEVICE_TYPE_UNKNOWN,
    DEVICE_TYPE_VIPER,
    Command,
    Device,
    DeviceEntity,
    DeviceStatus,
    DeviceStatusBase,
)
from .errors import APIErrorDetail, APIInvalidGrant, APIResponseError
from .installedapp import (
    InstalledApp,
    InstalledAppEntity,
    InstalledAppStatus,
    InstalledAppType,
)
from .location import Location, LocationEntity
from .oauthtoken import OAuthToken
from .room import Room, RoomEntity
from .scene import Scene, SceneEntity
from .smartthings import SmartThings
from .subscription import SourceType, Subscription, SubscriptionEntity

__all__ = [
    # app
    "APP_TYPE_LAMBDA",
    "APP_TYPE_WEBHOOK",
    "CLASSIFICATION_AUTOMATION",
    "App",
    "AppEntity",
    "AppOAuth",
    "AppOAuthClient",
    "AppOAuthClientEntity",
    "AppOAuthEntity",
    "AppSettings",
    "AppSettingsEntity",
    # capability
    "ATTRIBUTES",
    "CAPABILITIES",
    "CAPABILITIES_TO_ATTRIBUTES",
    "Attribute",
    "Capability",
    # device
    "DEVICE_TYPE_DTH",
    "DEVICE_TYPE_ENDPOINT_APP",
    "DEVICE_TYPE_OCF",
    "DEVICE_TYPE_UNKNOWN",
    "DEVICE_TYPE_VIPER",
    "Command",
    "Device",
    "DeviceEntity",
    "DeviceStatus",
    "DeviceStatusBase",
    # error
    "APIErrorDetail",
    "APIInvalidGrant",
    "APIResponseError",
    # installed app
    "InstalledApp",
    "InstalledAppEntity",
    "InstalledAppStatus",
    "InstalledAppType",
    # location
    "Location",
    "LocationEntity",
    # room
    "Room",
    "RoomEntity",
    # oauthtoken
    "OAuthToken",
    # scene
    "Scene",
    "SceneEntity",
    # smartthings
    "SmartThings",
    # subscription
    "SourceType",
    "Subscription",
    "SubscriptionEntity",
]
