"""Server-rendered A4 print view of one member's monthly report (Django-admin staff only).

The organization is explicit (`?org=<slug>`) and the member must belong to it, so this page can never
mix tenants."""
from __future__ import annotations

from django.contrib.admin.views.decorators import staff_member_required
from django.http import Http404
from django.shortcuts import get_object_or_404, render

from application.use_cases.reports import BuildMonthlyReport
from apps.organizations.models import Organization
from interfaces.api.support import repositories_for


@staff_member_required
def report_print_view(request):
    organization = get_object_or_404(Organization, slug=request.GET.get("org", ""))
    repos = repositories_for(organization)
    try:
        user = repos.members.get_user(int(request.GET.get("user_id", "")))
        year = int(request.GET.get("year", 0) or 0)
        month = int(request.GET.get("month", 0) or 0)
    except ValueError:
        raise Http404()
    if user is None:
        raise Http404()

    report = BuildMonthlyReport(repos.attendance, repos.holiday, repos.leave, repos.schedule).execute(
        user.id, year, month
    )
    return render(
        request,
        "reports/print.html",
        {
            "user": user,
            "organization": organization,
            "year": year,
            "month": month,
            "rows": report.rows,
            "monthly_total": report.monthly_total,
        },
    )
