from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _

from .models import Task, TaskList


class DateInput(forms.DateInput):
    input_type = "date"


class TaskAdminForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = "__all__"

        labels = {
            "title": _("Titel"),
            "task_list": _("Aufgabenbereich"),
            "due_date": _("Fälligkeit"),
            "completed": _("Abgeschlossen"),
            "completed_date": _("Datum der Fertigstellung"),
            "assigned_to": _("Zuweisen an"),
            "note": _("Notizen"),
            "priority": _("Priorität"),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  # to get the self.fields set
        self.fields["assigned_to"].empty_label = "Alle"
        self.fields["assigned_to"].queryset = self.fields[
            "assigned_to"
        ].queryset.order_by("username")


class TaskForm(forms.ModelForm):
    class Meta:
        model = Task

        fields = [
            "title",
            "task_list",
            "due_date",
            "assigned_to",
        ]

        labels = {
            "title": _("Titel des Tasks"),
            "task_list": _("Task-Gruppe"),
            "due_date": _("Fälligkeitsdatum"),
            "assigned_to": _("Zuweisen an"),
        }

        widgets = {
            "due_date": DateInput(
                format=("%d-%m-%Y"),
            )
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  # to get the self.fields set
        self.fields["assigned_to"].empty_label = "Alle"
        self.fields["assigned_to"].queryset = self.fields[
            "assigned_to"
        ].queryset.order_by("username")


class TaskListForm(forms.ModelForm):
    users = forms.ModelMultipleChoiceField(
        label="Benutzer",
        help_text="Es können nur die Benutzer ausgewählt werden, die sich auf der Homepage angemeldet haben.",
        queryset=User.objects.all().order_by("username"),
        widget=FilteredSelectMultiple("User", is_stacked=False),
    )

    class Meta:
        model = TaskList
        fields = "__all__"
