"""Example module integration — shows how any module connects to the Reporting Engine.

Place a ``reports.py`` file in your module's root and the Reporting Engine's
autodiscovery will pick it up automatically (via ``autodiscover_modules("reports")``
in ``apps.py.ready()``).

Usage in a module (e.g. ``backend/simorgh/apps/crm/reports.py``)::

    from simorgh.apps.reporting.registry import (
        report_registry,
        kpi_registry,
        dashboard_registry,
        ReportSpec,
        KPISpec,
        DashboardSpec,
        DashboardWidgetSpec,
    )

    report_registry.register(ReportSpec(
        code="crm.leads_by_status",
        name="Leads by Status",
        module="crm",
        resource="/api/v1/crm/leads/report/",
        entity_type="crm.lead",
        columns=[
            {"key": "full_name", "label": "Full Name", "type": "text"},
            {"key": "email", "label": "Email", "type": "text"},
            {"key": "status", "label": "Status", "type": "select-badge"},
            {"key": "created_at", "label": "Created", "type": "date"},
        ],
        filters_schema=[
            {"key": "status", "label": "Status", "widget": "select",
             "options_resource": "/api/v1/crm/leads/statuses/"},
            {"key": "created_at", "label": "Created Date", "widget": "date"},
        ],
        export_formats=["csv", "xlsx", "pdf"],
        permission="crm.lead.view",
    ))

    kpi_registry.register(KPISpec(
        code="crm.open_leads_count",
        name="Open Leads",
        module="crm",
        resource="/api/v1/crm/leads/kpi/open/",
        format="number",
        trend_resource="/api/v1/crm/leads/kpi/open/trend/",
        permission="crm.lead.view",
    ))

    dashboard_registry.register(DashboardSpec(
        code="crm.sales_dashboard",
        name="Sales Dashboard",
        module="crm",
        permission="crm.lead.view",
        is_default=False,
        layout={
            "rows": [
                {"columns": [
                    {"widget": "kpi", "kpi_code": "crm.open_leads_count", "col_span": 1},
                    {"widget": "kpi", "kpi_code": "crm.won_deals_value", "col_span": 1},
                    {"widget": "kpi", "kpi_code": "crm.conversion_rate", "col_span": 1},
                    {"widget": "kpi", "kpi_code": "crm.avg_deal_size", "col_span": 1},
                ]},
                {"columns": [
                    {"widget": "chart", "resource": "/api/v1/crm/leads/trend/",
                     "chart_type": "line", "title_key": "crm.dashboard.leads_trend", "col_span": 2},
                    {"widget": "chart", "resource": "/api/v1/crm/opportunities/by-stage/",
                     "chart_type": "bar", "title_key": "crm.dashboard.pipeline", "col_span": 2},
                ]},
                {"columns": [
                    {"widget": "data-table", "resource": "/api/v1/crm/leads/recent/",
                     "title_key": "crm.dashboard.recent_leads", "col_span": 2},
                    {"widget": "activity-stream", "resource": "/api/v1/crm/activities/recent/",
                     "title_key": "crm.dashboard.recent_activity", "col_span": 2},
                ]},
            ]
        },
    ))
"""

from __future__ import annotations

from simorgh.apps.reporting.registry import (
    DashboardSpec,
    KPISpec,
    ReportSpec,
    dashboard_registry,
    kpi_registry,
    report_registry,
)


def load_example_reports() -> None:
    """Register example reports/KPIs/dashboards for demo purposes.

    Called from seed commands. Does NOT raise if already registered.
    """
    # Example: CRM report
    report_registry.replace(
        ReportSpec(
            code="crm.leads_by_status",
            name="Leads by Status",
            module="crm",
            resource="/api/v1/crm/leads/report/",
            entity_type="crm.lead",
            columns=[
                {"key": "full_name", "label": "Full Name", "type": "text"},
                {"key": "email", "label": "Email", "type": "text"},
                {"key": "status", "label": "Status", "type": "select-badge"},
                {"key": "created_at", "label": "Created", "type": "date"},
            ],
            filters_schema=[
                {"key": "status", "label": "Status", "widget": "select",
                 "options_resource": "/api/v1/crm/leads/statuses/"},
                {"key": "created_at", "label": "Created Date", "widget": "date"},
            ],
            export_formats=["csv", "xlsx", "pdf"],
            permission="crm.lead.view",
        )
    )

    # Example: Helpdesk report
    report_registry.replace(
        ReportSpec(
            code="helpdesk.tickets_by_status",
            name="Tickets by Status",
            module="helpdesk",
            resource="/api/v1/helpdesk/tickets/report/",
            entity_type="helpdesk.ticket",
            columns=[
                {"key": "subject", "label": "Subject", "type": "text"},
                {"key": "status", "label": "Status", "type": "select-badge"},
                {"key": "priority", "label": "Priority", "type": "select-badge"},
                {"key": "assigned_to", "label": "Assignee", "type": "avatar"},
                {"key": "created_at", "label": "Created", "type": "date"},
            ],
            filters_schema=[
                {"key": "status", "label": "Status", "widget": "select"},
                {"key": "priority", "label": "Priority", "widget": "select"},
                {"key": "created_at", "label": "Date Range", "widget": "date"},
            ],
            export_formats=["csv", "xlsx"],
            permission="helpdesk.view_ticket",
        )
    )

    # Example KPIs
    for spec in [
        KPISpec(
            code="crm.open_leads_count",
            name="Open Leads",
            module="crm",
            resource="/api/v1/crm/leads/kpi/open/",
            format="number",
            trend_resource="/api/v1/crm/leads/kpi/open/trend/",
            permission="crm.lead.view",
        ),
        KPISpec(
            code="crm.won_deals_value",
            name="Won Deals Value",
            module="crm",
            resource="/api/v1/crm/opportunities/kpi/won/",
            format="currency",
            unit="IRR",
            decimal_places=0,
            trend_resource="/api/v1/crm/opportunities/kpi/won/trend/",
            permission="crm.lead.view",
        ),
        KPISpec(
            code="helpdesk.open_tickets",
            name="Open Tickets",
            module="helpdesk",
            resource="/api/v1/helpdesk/tickets/kpi/open/",
            format="number",
            trend_resource="/api/v1/helpdesk/tickets/kpi/open/trend/",
            permission="helpdesk.view_ticket",
        ),
        KPISpec(
            code="helpdesk.avg_resolution_hours",
            name="Avg Resolution Time",
            module="helpdesk",
            resource="/api/v1/helpdesk/tickets/kpi/resolution/",
            format="duration",
            unit="hrs",
            decimal_places=1,
            permission="helpdesk.view_ticket",
        ),
    ]:
        kpi_registry.replace(spec)

    # Example dashboards
    dashboard_registry.replace(
        DashboardSpec(
            code="crm.sales_dashboard",
            name="Sales Dashboard",
            module="crm",
            permission="crm.lead.view",
            is_default=True,
            layout={
                "rows": [
                    {"columns": [
                        {"widget": "kpi", "kpi_code": "crm.open_leads_count", "col_span": 1},
                        {"widget": "kpi", "kpi_code": "crm.won_deals_value", "col_span": 1},
                        {"widget": "kpi", "kpi_code": "crm.conversion_rate", "col_span": 1},
                        {"widget": "kpi", "kpi_code": "crm.avg_deal_size", "col_span": 1},
                    ]},
                    {"columns": [
                        {"widget": "chart", "resource": "/api/v1/crm/leads/trend/",
                         "chart_type": "line", "title_key": "crm.dashboard.leads_trend", "col_span": 2},
                        {"widget": "chart", "resource": "/api/v1/crm/opportunities/by-stage/",
                         "chart_type": "bar", "title_key": "crm.dashboard.pipeline", "col_span": 2},
                    ]},
                ],
            },
        )
    )

    dashboard_registry.replace(
        DashboardSpec(
            code="helpdesk.support_dashboard",
            name="Support Dashboard",
            module="helpdesk",
            permission="helpdesk.view_ticket",
            layout={
                "rows": [
                    {"columns": [
                        {"widget": "kpi", "kpi_code": "helpdesk.open_tickets", "col_span": 1},
                        {"widget": "kpi", "kpi_code": "helpdesk.avg_resolution_hours", "col_span": 1},
                    ]},
                    {"columns": [
                        {"widget": "chart", "resource": "/api/v1/helpdesk/tickets/trend/",
                         "chart_type": "area", "title_key": "helpdesk.dashboard.tickets_trend", "col_span": 2},
                        {"widget": "data-table", "resource": "/api/v1/helpdesk/tickets/recent/",
                         "title_key": "helpdesk.dashboard.recent_tickets", "col_span": 2},
                    ]},
                ],
            },
        )
    )
