"""Read-only administration summaries; management stays in existing destinations."""
from django.contrib.auth import get_user_model
from django.urls import reverse
from apps.operations import queries
from apps.organization.models import ServiceCenter, Department
from apps.catalog.models import ProductModel
from apps.frontdesk.models import AppointmentSlot
from apps.sla.models import SlaPolicy
from apps.communications.models import NotificationTemplate
from .navigation import system_administrator


def metrics(request, can):
    result = []

    def add(label, rows, route, definition):
        result.append(dict(label=label, value=rows.count(), url=reverse(route), definition=definition))

    if system_administrator(request.user):
        for label, model, route in [
            ("Active users", get_user_model(), "admin:accounts_user_changelist"),
            ("Active service centers", ServiceCenter, "admin:organization_servicecenter_changelist"),
            ("Active departments", Department, "admin:organization_department_changelist"),
            ("Active product models", ProductModel, "admin:catalog_productmodel_changelist"),
        ]:
            add(label, model.objects.filter(is_active=True), route,
                "Global records with active state enabled; not a readiness or operational coverage assessment.")
    if can("frontdesk.manage_slots"):
        add("Active dated appointment slots", AppointmentSlot.objects.filter(is_active=True,
            service_center__in=queries.centers(request.user, "frontdesk.manage_slots")), "configuration:slots",
            "Active slot records across authorized centers, including past dates. This is not remaining capacity.")
    for permission, label, model, route in [
        ("sla.manage_slapolicy", "Active SLA policies", SlaPolicy, "sla:policies"),
        ("communications.manage_templates", "Active notification templates", NotificationTemplate, "communications:templates"),
    ]:
        if can(permission, True):
            add(label, model.objects.filter(is_active=True, company__in=queries.companies(request.user, permission)),
                route, "Active records in authorized companies; not effective coverage or delivery verification.")
    return result
