__version__ = "0.3.1"

from pygoose.core import (
    Document,
    QuerySet,
    Ref,
    LazyRef,
    connect,
    disconnect,
    get_database,
    get_client,
)
from pygoose.fields import (
    PyObjectId,
    Encrypted,
    encryption,
    generate_encryption_key,
    Indexed,
    IndexSpec,
)
from pygoose.lifecycle import (
    pre_validate,
    pre_save,
    post_save,
    pre_delete,
    post_delete,
    post_update,
    enable_tracing,
    disable_tracing,
    QueryEvent,
    add_listener,
)
from pygoose.plugins import (
    AuditMixin,
    SoftDeleteMixin,
    TimestampsMixin,
    set_audit_context,
    get_audit_context,
    clear_audit_context,
)
from pygoose.integrations import init_app
from pygoose.utils import (
    PygooseError,
    DocumentNotFound,
    MultipleDocumentsFound,
    NotConnected,
    Page,
    CursorPage,
)

__all__ = [
    # Version
    "__version__",
    # Core
    "Document",
    "QuerySet",
    "Ref",
    "LazyRef",
    "connect",
    "disconnect",
    "get_database",
    "get_client",
    # Fields
    "PyObjectId",
    "Encrypted",
    "encryption",
    "generate_encryption_key",
    "Indexed",
    "IndexSpec",
    # Lifecycle
    "pre_validate",
    "pre_save",
    "post_save",
    "pre_delete",
    "post_delete",
    "post_update",
    "enable_tracing",
    "disable_tracing",
    "QueryEvent",
    "add_listener",
    # Plugins
    "AuditMixin",
    "SoftDeleteMixin",
    "TimestampsMixin",
    "set_audit_context",
    "get_audit_context",
    "clear_audit_context",
    # Integrations
    "init_app",
    # Utils
    "PygooseError",
    "DocumentNotFound",
    "MultipleDocumentsFound",
    "NotConnected",
    "Page",
    "CursorPage",
]
