from simorgh.apps.modules.registry import CapabilitySpec, FeatureSpec, ModuleManifest, register_module

register_module(
    ModuleManifest(
        name="provisioning",
        version=1,
        domain="platform",
        label_key="provisioning.module_label",
        description="Data Provisioning Engine — fixture registry, seed/benchmark/snapshot runners, tenant/workspace-scoped data generation",
        capabilities=(
            CapabilitySpec(slug="fixtures", label_key="provisioning.capabilities.fixtures",
                          description="Data fixtures and seeding", icon="database"),
        ),
        features=(
            FeatureSpec(
                code="fixtures.fixture_registry",
                label_key="provisioning.features.fixture_registry",
                scope="tenant",
                default_enabled=True,
                is_always_on=True,
                is_platform_internal=True,
                description="Central registry for fixture providers with dependency resolution",
            ),
            FeatureSpec(
                code="fixtures.seed_runner",
                label_key="provisioning.features.seed_runner",
                scope="tenant",
                default_enabled=True,
                is_platform_internal=True,
                description="Idempotent seed execution with topological ordering",
            ),
            FeatureSpec(
                code="fixtures.snapshot_manager",
                label_key="provisioning.features.snapshot",
                scope="tenant",
                description="Database snapshot capture and restore for test isolation",
            ),
            FeatureSpec(
                code="fixtures.benchmark_generator",
                label_key="provisioning.features.benchmark",
                scope="tenant",
                description="Large-volume realistic benchmark data generation",
            ),
        ),
        permissions=(
            "provisioning.fixture.manage",
            "provisioning.seed.run",
            "provisioning.snapshot.manage",
            "provisioning.benchmark.run",
        ),
        events=(
            "fixture_executed",
            "seed_completed",
            "snapshot_created",
            "snapshot_restored",
            "benchmark_generated",
        ),
    )
)
