from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

register_module(
    ModuleManifest(
        name="bpm",
        version=1,
        domain="business",
        label_key="bpm.module_label",
        description="BPM / APQC Process Management — process mapping, RACI, KPI, execution, BPMN",
        permissions=(
            "bpm.pcfframework.view",
            "bpm.pcfframework.add",
            "bpm.pcfframework.change",
            "bpm.pcfframework.delete",
            "bpm.pcfelement.view",
            "bpm.pcfelement.add",
            "bpm.pcfelement.change",
            "bpm.pcfelement.delete",
            "bpm.pcfmetric.view",
            "bpm.pcfmetric.add",
            "bpm.pcfmetric.change",
            "bpm.pcfmetric.delete",
            "bpm.processdefinition.view",
            "bpm.processdefinition.add",
            "bpm.processdefinition.change",
            "bpm.processdefinition.delete",
            "bpm.processownership.view",
            "bpm.processownership.add",
            "bpm.processownership.change",
            "bpm.processownership.delete",
            "bpm.processdocument.view",
            "bpm.processdocument.add",
            "bpm.processdocument.change",
            "bpm.processdocument.delete",
            "bpm.processdataitem.view",
            "bpm.processdataitem.add",
            "bpm.processdataitem.change",
            "bpm.processdataitem.delete",
            "bpm.processio.view",
            "bpm.processio.add",
            "bpm.processio.change",
            "bpm.processio.delete",
            "bpm.processrole.view",
            "bpm.processrole.add",
            "bpm.processrole.change",
            "bpm.processrole.delete",
            "bpm.racimatrix.view",
            "bpm.racimatrix.add",
            "bpm.racimatrix.change",
            "bpm.racimatrix.delete",
            "bpm.processrule.view",
            "bpm.processrule.add",
            "bpm.processrule.change",
            "bpm.processrule.delete",
            "bpm.processcontrolpoint.view",
            "bpm.processcontrolpoint.add",
            "bpm.processcontrolpoint.change",
            "bpm.processcontrolpoint.delete",
            "bpm.processkpi.view",
            "bpm.processkpi.add",
            "bpm.processkpi.change",
            "bpm.processkpi.delete",
            "bpm.processkpimeasurement.view",
            "bpm.processkpimeasurement.add",
            "bpm.processkpimeasurement.change",
            "bpm.processkpimeasurement.delete",
            "bpm.kpialert.view",
            "bpm.kpialert.add",
            "bpm.kpialert.change",
            "bpm.kpialert.delete",
            "bpm.processinstance.view",
            "bpm.processinstance.add",
            "bpm.processinstance.change",
            "bpm.processinstance.delete",
            "bpm.processbpmn.view",
            "bpm.processbpmn.add",
            "bpm.processbpmn.change",
            "bpm.processbpmn.delete",
        ),
        events=(),
        capabilities=(
            CapabilitySpec(slug="processes", label_key="bpm.capabilities.processes",
                          description="Business process management", icon="flow"),
        ),
        features=(
            FeatureSpec(
                code="processes.pcf_framework",
                label_key="bpm.feature.pcf_framework",
                scope="tenant",
                default_enabled=True,
                description="APQC Process Classification Framework management",
            ),
            FeatureSpec(
                code="processes.process_definition",
                label_key="bpm.feature.process_definition",
                scope="tenant",
                default_enabled=True,
                description="Define organisational processes with documentation",
            ),
            FeatureSpec(
                code="processes.raci_matrix",
                label_key="bpm.feature.raci_matrix",
                scope="tenant",
                default_enabled=True,
                description="RACI responsibility assignment matrices",
            ),
            FeatureSpec(
                code="processes.kpi_management",
                label_key="bpm.feature.kpi_management",
                scope="tenant",
                default_enabled=True,
                description="KPI definitions, measurements, and alerts",
            ),
            FeatureSpec(
                code="processes.process_execution",
                label_key="bpm.feature.process_execution",
                scope="tenant",
                description="Execute process instances with step tracking",
            ),
            FeatureSpec(
                code="processes.process_control",
                label_key="bpm.feature.process_control",
                scope="tenant",
                default_enabled=True,
                description="Control points and rule compliance checks",
            ),
            FeatureSpec(
                code="processes.bpmn_diagrams",
                label_key="bpm.feature.bpmn_diagrams",
                scope="tenant",
                description="BPMN 2.0 diagram upload and visualisation",
            ),
        ),
    )
)
