"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22

"""
from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from intervention.models import Intervention
from konova.contexts import BaseContext
from konova.forms import SimpleGeomForm
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.qrcode import QrCode
from konova.views.report import AbstractPublicReportView


class InterventionPublicReportView(AbstractPublicReportView):
    _TEMPLATE = "intervention/report/report.html"

    def get(self, request: HttpRequest, id: str, *args, **kwargs) -> HttpResponse:
        """ Renders the public report view

        Args:
            request (HttpRequest): The incoming request
            id (str): The id of the intervention

        Returns:

        """
        intervention = get_object_or_404(Intervention, id=id)

        tab_title = _("Report {}").format(intervention.identifier)
        # If intervention is not recorded (yet or currently) we need to render another template without any data
        if not intervention.is_ready_for_publish():
            template = "report/unavailable.html"
            context = {
                TAB_TITLE_IDENTIFIER: tab_title,
            }
            context = BaseContext(request, context).context
            return render(request, template, context)

        # Prepare data for map viewer
        geom_form = SimpleGeomForm(
            instance=intervention
        )
        parcels = intervention.get_underlying_parcels()

        distinct_deductions = intervention.deductions.all().distinct(
            "account"
        )

        qrcode = QrCode(
            content=request.build_absolute_uri(reverse("intervention:report", args=(id,))),
            size=10
        )
        qrcode_lanis = QrCode(
            content=intervention.get_LANIS_link(),
            size=7
        )

        context = {
            "obj": intervention,
            "deductions": distinct_deductions,
            "qrcode": {
                "img": qrcode.get_img(),
                "url": qrcode.get_content(),
            },
            "qrcode_lanis": {
                "img": qrcode_lanis.get_img(),
                "url": qrcode_lanis.get_content(),
            },
            "geom_form": geom_form,
            "parcels": parcels,
            "tables_scrollable": False,
            TAB_TITLE_IDENTIFIER: tab_title,
        }
        context = BaseContext(request, context).context
        return render(request, self._TEMPLATE, context)