"""Spindle by SQLLocks — Multi-domain synthetic data generator for Microsoft Fabric."""

__version__ = "1.2.0"

from sqllocks_spindle.engine.generator import Spindle
from sqllocks_spindle.domains.retail import RetailDomain
from sqllocks_spindle.domains.healthcare import HealthcareDomain
from sqllocks_spindle.domains.financial import FinancialDomain
from sqllocks_spindle.domains.supply_chain import SupplyChainDomain
from sqllocks_spindle.domains.iot import IoTDomain
from sqllocks_spindle.domains.hr import HrDomain

# Convenience alias — both HrDomain and HRDomain work
HRDomain = HrDomain
from sqllocks_spindle.domains.insurance import InsuranceDomain
from sqllocks_spindle.domains.marketing import MarketingDomain
from sqllocks_spindle.domains.education import EducationDomain
from sqllocks_spindle.domains.real_estate import RealEstateDomain
from sqllocks_spindle.domains.manufacturing import ManufacturingDomain
from sqllocks_spindle.domains.telecom import TelecomDomain

from sqllocks_spindle.transform import (
    CdmEntityMap,
    CdmMapper,
    DimSpec,
    FactSpec,
    StarSchemaMap,
    StarSchemaResult,
    StarSchemaTransform,
)

from sqllocks_spindle.streaming import (
    Anomaly,
    AnomalyRegistry,
    BurstWindow,
    CollectiveAnomaly,
    ConsoleSink,
    ContextualAnomaly,
    FileSink,
    PointAnomaly,
    SpindleStreamer,
    StreamConfig,
    StreamResult,
    StreamWriter,
    TimePattern,
)

# Chaos engine
from sqllocks_spindle.chaos import ChaosEngine, ChaosConfig, ChaosCategory

# Cross-domain composition
from sqllocks_spindle.domains.composite import CompositeDomain
from sqllocks_spindle.domains.shared_registry import SharedEntityRegistry

# Simulation layer
from sqllocks_spindle.simulation import (
    FileDropSimulator,
    FileDropConfig,
    StreamEmitter,
    StreamEmitConfig,
    HybridSimulator,
    HybridConfig,
)

# Scenario packs and specs
from sqllocks_spindle.packs import PackLoader, ScenarioPack, PackValidator, PackRunner
from sqllocks_spindle.specs import GSLParser, GenerationSpec
from sqllocks_spindle.manifests import RunManifest, ManifestBuilder

# Validation
from sqllocks_spindle.validation import GateRunner, QuarantineManager

# Fabric integration
from sqllocks_spindle.fabric import OneLakePaths, LakehouseFilesWriter

# Streaming envelope
from sqllocks_spindle.streaming.envelope import EventEnvelope, EnvelopeFactory

__all__ = [
    # Core
    "Spindle",
    # Domains
    "RetailDomain",
    "HealthcareDomain",
    "FinancialDomain",
    "SupplyChainDomain",
    "IoTDomain",
    "HrDomain",
    "HRDomain",
    "InsuranceDomain",
    "MarketingDomain",
    "EducationDomain",
    "RealEstateDomain",
    "ManufacturingDomain",
    "TelecomDomain",
    # Cross-domain
    "CompositeDomain",
    "SharedEntityRegistry",
    # Streaming
    "SpindleStreamer",
    "StreamResult",
    "StreamConfig",
    "BurstWindow",
    "TimePattern",
    "StreamWriter",
    "ConsoleSink",
    "FileSink",
    "EventEnvelope",
    "EnvelopeFactory",
    # Anomaly
    "AnomalyRegistry",
    "PointAnomaly",
    "ContextualAnomaly",
    "CollectiveAnomaly",
    "Anomaly",
    # Chaos
    "ChaosEngine",
    "ChaosConfig",
    "ChaosCategory",
    # Simulation
    "FileDropSimulator",
    "FileDropConfig",
    "StreamEmitter",
    "StreamEmitConfig",
    "HybridSimulator",
    "HybridConfig",
    # Packs & Specs
    "PackLoader",
    "ScenarioPack",
    "PackValidator",
    "PackRunner",
    "GSLParser",
    "GenerationSpec",
    # Manifests
    "RunManifest",
    "ManifestBuilder",
    # Validation
    "GateRunner",
    "QuarantineManager",
    # Fabric
    "OneLakePaths",
    "LakehouseFilesWriter",
    # Transform
    "StarSchemaTransform",
    "StarSchemaResult",
    "StarSchemaMap",
    "DimSpec",
    "FactSpec",
    "CdmMapper",
    "CdmEntityMap",
]
