import os
import tempfile

from wagtail.admin.forms import WagtailAdminPageForm
from wagtail.models.media import Collection

from shared.forms import JekyllImportForm as SharedJekyllImportForm
from shared.forms import ArticlesPageForm as SharedArticlesPageForm
from django.forms import ModelMultipleChoiceField, CheckboxSelectMultiple
from modelcluster.forms import ClusterForm

from .tasks import import_jekyll_articles, import_people_from_group


class JekyllImportForm(SharedJekyllImportForm):
    def handle_import(self):
        lock_file_name = os.path.join(
            tempfile.gettempdir(), f".{self.instance.id}.articles-import-lock"
        )

        if os.path.isfile(lock_file_name):
            return

        open(lock_file_name, "w").close()

        import_jekyll_articles.delay(
            article_parent_page_id=self.instance.id,
            collection_id=self.cleaned_data["collection"].id,
            url=self.cleaned_data["jekyll_repo_url"],
            dry_run=self.cleaned_data["dry_run"],
            use_git=True,
        )


class DistrictPeoplePageForm(WagtailAdminPageForm):
    def save(self, *args, **kwargs):
        # If anything inside the content field has changed,
        # sync Octopus profiles just in case.
        if "content" in self.changed_data:
            collection_id = self.instance.root_page.image_collection_id

            if collection_id is None:
                collection_id = Collection.objects.first().id

            for shortcut in self.instance.get_syncable_octopus_groups():
                import_people_from_group.delay(
                    self.instance.id,
                    collection_id,
                    shortcut,
                )

        return super().save(*args, **kwargs)


class DistrictArticlesPageForm(SharedArticlesPageForm, JekyllImportForm):
    def __init__(self, *args, **kwargs):
        from .models import DistrictArticleTag
        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 = list(DistrictArticleTag.objects.filter(
                content_object__in=self.instance.get_children().specific()
            ).values_list('tag_id', flat=True).distinct().all())

            valid_tag_ids += list(self.instance.shared_tags.all())
            
            self.fields['displayed_tags'].queryset = DistrictArticleTag.objects.filter(id__in=valid_tag_ids).order_by("tag__name").distinct("tag__name")