from reviews.models import Invite


def global_context(request):
    pending_invites = 0
    if request.user.is_authenticated:
        pending_invites = Invite.objects.filter(
            invitee_email=request.user.email.lower(), status="pending"
        ).count()

    from rsl.services.extraction_prefill import (
        extraction_display_value,
        metadata_value_for_field,
        METADATA_GETTERS,
    )

    def can_autofill_metadata(field_description: str) -> bool:
        return field_description in METADATA_GETTERS

    ctx = {
        "pending_invites_count": pending_invites,
        "extraction_display_value": extraction_display_value,
        "metadata_value_for_field": metadata_value_for_field,
        "metadata_field_names": set(METADATA_GETTERS.keys()),
    }

    review_id = None
    if hasattr(request, "resolver_match") and request.resolver_match:
        review_id = request.resolver_match.kwargs.get("review_id")

    if request.user.is_authenticated and review_id:
        from reviews.models import Review
        from rsl.services.review_flow import build_flow_navigation, sidebar_step_status

        review = Review.objects.filter(pk=review_id).first()
        if review and review.is_author(request.user):
            endpoint = request.resolver_match.view_name or ""
            ctx["review_flow_nav"] = build_flow_navigation(review, endpoint)
            ctx["review_sidebar_status"] = sidebar_step_status(review)

    return ctx
