from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureFlagSpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

register_module(
    ModuleManifest(
        name="dms",
        version=1,
        domain="business",
        label_key="dms.module_label",
        description="Document Management System — files, folders, versioning, collaboration, records management",
        permissions=(
            "dms.assets.view",
            "dms.assets.create",
            "dms.assets.update",
            "dms.assets.delete",
            "dms.repositories.view",
            "dms.repositories.create",
            "dms.repositories.update",
            "dms.repositories.delete",
            "dms.documents.view",
            "dms.documents.create",
            "dms.documents.update",
            "dms.documents.delete",
            "dms.documents.download",
            "dms.preview.view",
            "dms.permissions.manage",
            "dms.versioning.view",
            "dms.versioning.create",
            "dms.versioning.restore",
            "dms.search.query",
            "dms.collaboration.comment",
            "dms.collaboration.mention",
            "dms.records.declare",
            "dms.records.hold",
            "dms.records.dispose",
            "dms.ai.tag",
            "dms.ai.classify",
            "dms.audit.view",
            "dms.settings.manage",
            "dms.workflow.manage",
        ),
        events=(
            "dms.document.created",
            "dms.document.updated",
            "dms.document.deleted",
            "dms.document.version_created",
            "dms.document.moved",
            "dms.document.shared",
            "dms.comment.added",
            "dms.mention.created",
            "dms.records.declared",
            "dms.records.hold_placed",
            "dms.records.hold_released",
        ),
        capabilities=(
            CapabilitySpec(slug="storage", label_key="dms.capabilities.storage",
                          description="Document storage and versioning", icon="folder"),
            CapabilitySpec(slug="collaboration", label_key="dms.capabilities.collaboration",
                          description="Comments and collaboration", icon="users"),
            CapabilitySpec(slug="records", label_key="dms.capabilities.records",
                          description="Records management and retention", icon="lock"),
            CapabilitySpec(slug="ai", label_key="dms.capabilities.ai",
                          description="AI-powered features", icon="sparkles"),
            CapabilitySpec(slug="workflow", label_key="dms.capabilities.workflow",
                          description="Document workflows", icon="flow"),
        ),
        features=(
            FeatureSpec(
                code="storage.document_storage",
                label_key="dms.feature.document_storage",
                scope="tenant",
                default_enabled=True,
                description="Store and organise documents in folders",
            ),
            FeatureSpec(
                code="storage.versioning",
                label_key="dms.feature.versioning",
                scope="tenant",
                default_enabled=True,
                description="Document version history with restore",
            ),
            FeatureSpec(
                code="storage.preview",
                label_key="dms.feature.preview",
                scope="tenant",
                default_enabled=True,
                description="In-browser document preview",
            ),
            FeatureSpec(
                code="collaboration.collaboration",
                label_key="dms.feature.collaboration",
                scope="tenant",
                default_enabled=True,
                description="Comments, mentions, and real-time collaboration",
            ),
            FeatureSpec(
                code="storage.search",
                label_key="dms.feature.search",
                scope="tenant",
                default_enabled=True,
                description="Full-text search across documents",
            ),
            FeatureSpec(
                code="records.records_management",
                label_key="dms.feature.records_management",
                scope="tenant",
                description="Declare documents as records with legal holds",
            ),
            FeatureSpec(
                code="ai.ai_tagging",
                label_key="dms.feature.ai_tagging",
                scope="tenant",
                description="Auto-tag and classify documents with AI",
            ),
            FeatureSpec(
                code="workflow.workflow_integration",
                label_key="dms.feature.workflow_integration",
                scope="tenant",
                description="Document review and approval workflows",
            ),
        ),
        feature_flags=(
            FeatureFlagSpec(
                name="force_version_on_edit",
                label_key="dms.ff.force_version_on_edit",
                default=True,
                scope="tenant",
            ),
            FeatureFlagSpec(
                name="enable_ai",
                label_key="dms.ff.enable_ai",
                default=False,
                scope="tenant",
            ),
        ),
    )
)
