"""
ORM Models package.

Every model file is imported here so that SQLAlchemy's Base.metadata
and Alembic's autogenerate discover all 26 database tables.

Tables in the system (25 total):
  1.  lab                      — Lab profile and branch settings
  2.  user                     — Staff accounts with role-based access
  3.  permission               — System permission definitions
  4.  role_permission          — Role-to-permission mapping
  5.  user_permission_override — Per-user permission overrides
  6.  patient                  — Patient demographic and contact records
  7.  test_category            — Classification of diagnostic tests
  8.  test                     — Individual diagnostic tests
  9.  test_parameter           — Quantitative/qualitative analyte parameters
  10. test_parameter_range     — Gender/age reference intervals
  11. test_package             — Bundled panels of tests
  12. test_package_item        — Test-to-package membership
  13. appointment_slot         — Daily booking time slots with capacity counters
  14. appointment              — Patient booking records
  15. visit_order              — Core patient lab visit order
  16. order_test               — Individual tests on an order with price snapshot
  17. order_package            — Packages on an order with price snapshot
  18. sample                   — Physical specimen collection and chain of custody
  19. report                   — Versioned medical diagnostic report with verification
  20. discount_rule            — Branch-level percentage/fixed discount rules
  21. bill                     — 1:1 visit order invoice and balance tracking
  22. payment                  — Payment transaction receipts (split-payment support)
  23. referral                 — Referring doctors, hospitals, clinics, and agents
  24. commission_entry         — Commission calculation and settlement ledger
  25. notification             — Outbound multi-channel dispatch logs (SMS/Email/Portal)
  26. unit_of_measure          — Shared measurement units for parameters
"""

from app.models.appointment import (
    Appointment,
    AppointmentSlot,
    AppointmentStatus,
    BookingChannel,
    LabHoliday,
    LabScheduleConfig,
)
from app.models.audit import (
    AuditCategory,
    AuditLog,
    AuditSeverity,
)
from app.models.base import (
    Base,
    LabScopedMixin,
    SoftDeleteMixin,
    TimestampMixin,
    UUIDPrimaryKeyMixin,
)
from app.models.billing import (
    Bill,
    BillStatus,
    DiscountRule,
    DiscountType,
    Payment,
    PaymentMode,
)
from app.models.expiring_state import ExpiringState
from app.models.lab import Lab
from app.models.notification import (
    Notification,
    NotificationChannel,
    NotificationStatus,
)
from app.models.order import (
    OrderPackage,
    OrderStatus,
    OrderTest,
    OrderTestStatus,
    Sample,
    SampleStatus,
    VisitOrder,
)
from app.models.package import (
    TestPackage,
    TestPackageItem,
)
from app.models.patient import (
    Gender,
    Patient,
)
from app.models.referral import (
    CommissionEntry,
    Referral,
    ReferralType,
)
from app.models.report import (
    Report,
    ReportStatus,
)
from app.models.test import (
    Test,
    TestCategory,
    TestParameter,
    TestParameterRange,
    TestResultType,
)
from app.models.unit import UnitOfMeasure
from app.models.user import (
    Permission,
    Role,
    RolePermission,
    User,
    UserPermissionOverride,
    UserRole,
)

__all__ = [
    "ExpiringState",
    # Base & Mixins
    "Base",
    "LabScopedMixin",
    "SoftDeleteMixin",
    "TimestampMixin",
    "UUIDPrimaryKeyMixin",
    # Lab
    "Lab",
    # User & Access Control
    "User",
    "UserRole",
    "Role",
    "Permission",
    "RolePermission",
    "UserPermissionOverride",
    # Patient
    "Patient",
    "Gender",
    # Test Catalog
    "TestCategory",
    "Test",
    "TestParameter",
    "TestParameterRange",
    "TestResultType",
    # Packages
    "TestPackage",
    "TestPackageItem",
    # Appointments
    "AppointmentSlot",
    "Appointment",
    "AppointmentStatus",
    "BookingChannel",
    "LabHoliday",
    "LabScheduleConfig",
    # Orders & Samples
    "VisitOrder",
    "OrderStatus",
    "OrderTest",
    "OrderTestStatus",
    "OrderPackage",
    "Sample",
    "SampleStatus",
    # Reports
    "Report",
    "ReportStatus",
    # Billing & Payments
    "DiscountRule",
    "DiscountType",
    "Bill",
    "BillStatus",
    "Payment",
    "PaymentMode",
    # Referrals & Commission
    "Referral",
    "ReferralType",
    "CommissionEntry",
    # Notifications
    "Notification",
    "NotificationChannel",
    "NotificationStatus",
    # Shared catalog
    "UnitOfMeasure",
    # Audit
    "AuditCategory",
    "AuditLog",
    "AuditSeverity",
]
