from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureFlagSpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

register_module(
    ModuleManifest(
        name="assignments",
        version=1,
        domain="platform",
        label_key="assignments.module_label",
        description="Assignment Engine — reference management for actions, reviews, approvals, info, signatures, and follow-ups",
        capabilities=(
            CapabilitySpec(slug="management", label_key="assignments.capabilities.management",
                          description="Assignment and task management", icon="tasks"),
        ),
        features=(
            FeatureSpec(
                code="management.assignment_management",
                label_key="assignments.features.assignment_management",
                scope="tenant",
                default_enabled=True,
                description="Create and manage assignments with status workflow",
            ),
            FeatureSpec(
                code="management.assignment_to_role",
                label_key="assignments.features.assignment_to_role",
                scope="tenant",
                default_enabled=True,
                description="Assign to IAM roles in addition to individual users",
            ),
            FeatureSpec(
                code="management.assignment_to_org_unit",
                label_key="assignments.features.assignment_to_org_unit",
                scope="tenant",
                default_enabled=True,
                description="Assign to organizational units",
            ),
            FeatureSpec(
                code="management.assignment_bulk",
                label_key="assignments.features.assignment_bulk",
                scope="tenant",
                default_enabled=True,
                description="Create bulk/group assignments",
            ),
        ),
        feature_flags=(
            FeatureFlagSpec(
                name="allow_confidential_assignments",
                label_key="assignments.ff.allow_confidential_assignments",
                default=False,
                scope="tenant",
            ),
        ),
        permissions=(
            "assignments.assignment.view",
            "assignments.assignment.create",
            "assignments.assignment.update",
            "assignments.assignment.delete",
            "assignments.assignment.complete",
            "assignments.assignment.reassign",
            "assignments.assignment.cancel",
            "assignments.tag.manage",
        ),
        events=(
            "assignment.created",
            "assignment.assigned",
            "assignment.completed",
            "assignment.reassigned",
            "assignment.overdue",
            "assignment.cancelled",
        ),
    )
)
