from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureFlagSpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

register_module(
    ModuleManifest(
        name="delegations",
        version=1,
        label_key="delegations.module_label",
        domain="platform",
        description="Delegation Engine — central delegation/absence/proxy management for rerouting assignments, approvals, and tasks to substitutes",
        capabilities=(
            CapabilitySpec(slug="management", label_key="delegations.capabilities.management",
                          description="Delegation rules and management", icon="share-2"),
        ),
        features=(
            FeatureSpec(
                code="management.delegation_management",
                label_key="delegations.features.delegation_management",
                scope="tenant",
                default_enabled=True,
                description="Create and manage delegation rules with date ranges and scopes",
            ),
            FeatureSpec(
                code="management.delegation_to_role",
                label_key="delegations.features.delegation_to_role",
                scope="tenant",
                default_enabled=True,
                description="Delegate to IAM roles in addition to individual users",
            ),
            FeatureSpec(
                code="management.delegation_auto_expire",
                label_key="delegations.features.delegation_auto_expire",
                scope="tenant",
                default_enabled=True,
                description="Automatically expire delegation rules at end_date",
            ),
        ),
        feature_flags=(
            FeatureFlagSpec(
                name="allow_scoped_delegation",
                label_key="delegations.ff.allow_scoped_delegation",
                default=True,
                scope="tenant",
            ),
        ),
        permissions=(
            "delegations.rule.view",
            "delegations.rule.create",
            "delegations.rule.update",
            "delegations.rule.delete",
            "delegations.rule.activate",
            "delegations.rule.deactivate",
            "delegations.log.view",
        ),
        events=(
            "delegation.created",
            "delegation.activated",
            "delegation.deactivated",
            "delegation.expired",
            "delegation.deleted",
        ),
    )
)
