from simorgh.apps.modules.registry import (
    CapabilitySpec,
    FeatureSpec,
    ModuleManifest,
    ServiceContract,
    register_module,
)
from simorgh.apps.visualization.permissions import VIS_PERMISSIONS

register_module(
    ModuleManifest(
        name="visualization",
        version=1,
        domain="platform",
        label_key="visualization.module_label",
        description="Views & Visualization Engine — list, detail, board, kanban, calendar, "
        "timeline, tree, organization chart, chart views, and dashboard widgets",
        permissions=VIS_PERMISSIONS,
        events=(
            "visualization.view_created",
            "visualization.view_updated",
            "visualization.view_deleted",
            "visualization.dashboard_created",
            "visualization.dashboard_updated",
            "visualization.dashboard_deleted",
            "visualization.chart_created",
            "visualization.chart_updated",
            "visualization.chart_deleted",
            "visualization.widget_added",
        ),
        contracts=(
            ServiceContract(
                name="visualization.list_view_types",
                provider="simorgh.apps.visualization.contracts:get_available_view_types",
                description="Return all registered view types (list, board, kanban, calendar, timeline, tree, org_chart, chart, dashboard).",
            ),
            ServiceContract(
                name="visualization.list_chart_types",
                provider="simorgh.apps.visualization.contracts:get_available_chart_types",
                description="Return all registered chart types (bar, line, pie, donut, area, scatter, radar, funnel, heatmap).",
            ),
            ServiceContract(
                name="visualization.list_widget_types",
                provider="simorgh.apps.visualization.contracts:get_available_widget_types",
                description="Return all registered dashboard widget types, optionally filtered by kind.",
            ),
            ServiceContract(
                name="visualization.list_views_for_entity",
                provider="simorgh.apps.visualization.contracts:list_views_for_entity",
                description="Return all view configurations for a given entity type.",
            ),
            ServiceContract(
                name="visualization.list_dashboards_for_tenant",
                provider="simorgh.apps.visualization.contracts:list_dashboards_for_tenant",
                description="Return all dashboards with their widgets for a tenant.",
            ),
            ServiceContract(
                name="visualization.list_charts_for_entity",
                provider="simorgh.apps.visualization.contracts:list_charts_for_entity",
                description="Return all chart configurations for a given entity type.",
            ),
        ),
        capabilities=(
            CapabilitySpec(slug="views", label_key="visualization.capabilities.views",
                          description="Data visualization views", icon="layout"),
        ),
        features=(
            FeatureSpec(
                code="views.view_configurations",
                label_key="visualization.features.view_configurations",
                scope="tenant",
                default_enabled=True,
                is_always_on=True,
                is_platform_internal=True,
                description="View configuration CRUD — list, detail, board, kanban, calendar, timeline, tree, org_chart, chart views",
            ),
            FeatureSpec(
                code="views.dashboard_engine",
                label_key="visualization.features.dashboard_engine",
                scope="tenant",
                default_enabled=True,
                is_always_on=True,
                is_platform_internal=True,
                description="Dashboard builder with KPI, chart, data-table, calendar, activity-stream widgets",
            ),
            FeatureSpec(
                code="views.chart_engine",
                label_key="visualization.features.chart_engine",
                scope="tenant",
                default_enabled=True,
                is_always_on=True,
                is_platform_internal=True,
                description="Chart definitions — bar, line, pie, donut, area, scatter, radar, funnel, heatmap",
            ),
            FeatureSpec(
                code="views.saved_views",
                label_key="visualization.features.saved_views",
                scope="tenant",
                default_enabled=True,
                description="User-customised saved views with filters, sorting, and grouping",
            ),
            FeatureSpec(
                code="views.view_export",
                label_key="visualization.features.view_export",
                scope="tenant",
                default_enabled=True,
                description="Export view data as CSV, Excel, PDF",
            ),
        ),
    )
)
