from helpdesk.models import CustomField, KBItem, Queue


class AbstractCreateTicketMixin:
    def get_initial(self):
        initial_data = {}
        request = self.request
        try:
            initial_data["queue"] = Queue.objects.get(
                slug=request.GET.get("queue", None)
            ).id
        except Queue.DoesNotExist:
            pass
        u = request.user
        if (
            u.is_authenticated
            and u.usersettings_helpdesk.use_email_as_submitter
            and u.email
        ):
            initial_data["submitter_email"] = u.email

        query_param_fields = ["submitter_email", "title", "body", "queue", "kbitem"]
        custom_fields = [
            "custom_%s" % f.name for f in CustomField.objects.filter(staff_only=False)
        ]
        query_param_fields += custom_fields
        for qpf in query_param_fields:
            initial_data[qpf] = request.GET.get(qpf, initial_data.get(qpf, ""))

        return initial_data

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super().get_form_kwargs(*args, **kwargs)
        kbitem = self.request.GET.get(
            "kbitem",
            self.request.POST.get("kbitem", None),
        )
        if kbitem:
            try:
                kwargs["kbcategory"] = KBItem.objects.get(pk=int(kbitem)).category
            except (ValueError, KBItem.DoesNotExist):
                pass
        return kwargs
