"""Module Kit — the abstract base every module entity should inherit.

Goal: collapse the cross-cutting capabilities of Phase 11 into a single
mixin so feature modules can declare their domain model with one
inheritance chain and pick up everything the platform provides.

Composed mixins:

* :class:`~simorgh.core.models.UUIDModel`         — uuid + public_id
* :class:`~simorgh.core.models.TimeStampedModel`  — created_at / updated_at
* :class:`~simorgh.core.models.TenantScopedModel` — tenant + organization_node
* :class:`~simorgh.core.models.SoftDeleteModel`   — soft delete + cascade
* :class:`~simorgh.core.models.VersionedModel`    — optimistic locking

Modules can still inherit individual mixins if they don't need the full
stack (e.g. append-only log tables don't need versioning).
"""

from __future__ import annotations

from simorgh.core.models import (
    SoftDeleteModel,
    TenantScopedModel,
    UUIDModel,
    VersionedModel,
)


class PlatformEntityModel(
    UUIDModel,
    TenantScopedModel,
    SoftDeleteModel,
    VersionedModel,
):
    """Abstract base for module-owned entities.

    Inherit, add your domain fields, and you automatically get:
    UUID identity, tenant scoping (which includes timestamps), soft
    delete, and optimistic locking.
    """

    class Meta:
        abstract = True


__all__ = ["PlatformEntityModel"]
