from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureSpec,
    ModuleManifest,
    register_module,
)

MANIFEST = register_module(
    ModuleManifest(
        name="crm",
        version=2,
        label_key="crm.module_label",
        domain="business",
        description="Customer Relationship Management — contacts, leads, opportunities, pipelines",
        capabilities=(
            CapabilitySpec(
                slug="contacts",
                label_key="crm.capabilities.contacts",
                description="Contact database with phone/email/address",
                icon="users",
            ),
            CapabilitySpec(
                slug="sales",
                label_key="crm.capabilities.sales",
                description="Sales pipelines, leads, opportunities",
                icon="trending-up",
            ),
            CapabilitySpec(
                slug="activities",
                label_key="crm.capabilities.activities",
                description="Activity logging and timeline",
                icon="clock",
            ),
        ),
        features=(
            # ── contacts capability ──
            FeatureSpec(
                code="contacts.management",
                label_key="crm.features.contact_management",
                scope="tenant",
                default_enabled=True,
                description="Contact database with phone/email/address",
            ),
            FeatureSpec(
                code="contacts.merge",
                label_key="crm.features.contact_merge",
                scope="tenant",
                default_enabled=False,
                description="Merge duplicate contacts",
            ),
            FeatureSpec(
                code="contacts.export",
                label_key="crm.features.contact_export",
                scope="tenant",
                default_enabled=False,
                description="Export contacts to CSV/Excel",
            ),
            FeatureSpec(
                code="contacts.import",
                label_key="crm.features.contact_import",
                scope="tenant",
                default_enabled=False,
                description="Import contacts from CSV/Excel",
            ),
            # ── sales capability ──
            FeatureSpec(
                code="sales.pipeline",
                label_key="crm.features.pipeline_management",
                scope="tenant",
                default_enabled=True,
                description="Sales pipelines with stages",
            ),
            FeatureSpec(
                code="sales.leads",
                label_key="crm.features.lead_management",
                scope="tenant",
                default_enabled=True,
                description="Lead capture, scoring, qualification",
            ),
            FeatureSpec(
                code="sales.lead_scoring",
                label_key="crm.features.lead_scoring",
                scope="tenant",
                default_enabled=False,
                description="Automatic lead scoring and ranking",
            ),
            FeatureSpec(
                code="sales.opportunities",
                label_key="crm.features.opportunity_management",
                scope="tenant",
                default_enabled=True,
                description="Opportunity tracking with stage pipeline",
            ),
            FeatureSpec(
                code="sales.analytics",
                label_key="crm.features.advanced_reporting",
                scope="tenant",
                default_enabled=False,
                description="Sales analytics and pipeline forecasting",
            ),
            # ── activities capability ──
            FeatureSpec(
                code="activities.logging",
                label_key="crm.features.activity_logging",
                scope="tenant",
                default_enabled=True,
                description="Log calls, meetings, emails, notes",
            ),
        ),
        permissions=(
            "crm.contact.view",
            "crm.contact.add",
            "crm.contact.change",
            "crm.contact.delete",
            "crm.contact.merge",
            "crm.contact.export",
            "crm.tag.view",
            "crm.tag.manage",
            "crm.pipeline.view",
            "crm.pipeline.manage",
            "crm.lead.view",
            "crm.lead.create",
            "crm.lead.update",
            "crm.lead.delete",
            "crm.lead.assign",
            "crm.opportunity.view",
            "crm.opportunity.create",
            "crm.opportunity.update",
            "crm.opportunity.delete",
            "crm.opportunity.assign",
            "crm.opportunity.export",
            "crm.activity.view",
            "crm.activity.create",
            "crm.activity.update",
            "crm.activity.delete",
        ),
        events=(
            "crm.lead.created",
            "crm.lead.qualified",
            "crm.lead.lost",
            "crm.opportunity.created",
            "crm.opportunity.stage_changed",
            "crm.opportunity.won",
            "crm.opportunity.lost",
        ),
    )
)
