from wagtail.admin.forms import WagtailAdminPageForm
from shared.forms import ArticlesPageForm as SharedArticlesPageForm


class UniwebHomePageAdminForm(WagtailAdminPageForm):
    def clean(self):
        cleaned_data = super().clean()

        # If one logo is set, then both logos must be set.
        if (cleaned_data["dark_logo"] or cleaned_data["light_logo"]) and (
            not cleaned_data["dark_logo"] or not cleaned_data["light_logo"]
        ):
            self.add_error(
                "dark_logo",
                "Pokud je jedno logo nastaveno, musí být obě loga nastaveny.",
            )
            self.add_error(
                "light_logo",
                "Pokud je jedno logo nastaveno, musí být obě loga nastaveny.",
            )


class UniwebArticlesPageForm(SharedArticlesPageForm, WagtailAdminPageForm):
    def __init__(self, *args, **kwargs):
        from .models import UniwebArticleTag
        from shared.models import SharedTag

        super().__init__(*args, **kwargs)

        self.fields["shared_tags"].queryset = SharedTag.objects.order_by("name")

        if self.instance.pk:
            valid_tag_ids = UniwebArticleTag.objects.filter(
                content_object__in=self.instance.get_children().specific()
            ).values_list('id', flat=True).distinct()

            self.fields['displayed_tags'].queryset = UniwebArticleTag.objects.filter(id__in=valid_tag_ids).order_by("tag__name").distinct("tag__name")