from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.admin.panels import FieldPanel, InlinePanel, ObjectList, TabbedInterface
from wagtail.contrib.forms.models import AbstractForm, AbstractFormField
from wagtail.contrib.forms.panels import FormSubmissionsPanel
from wagtail.fields import StreamField
from wagtail.models import Page
from wagtailmetadata.models import MetadataPageMixin

from shared.models import ExtendedMetadataHomePageMixin
from shared_legacy.utils import make_promote_panels

from .blocks import CommonWishBlock, StatBlock, TourDateBlock


class MakeAWIshFormField(AbstractFormField):
    page = ParentalKey(
        "MakeAWishRoot", on_delete=models.CASCADE, related_name="form_fields"
    )


class MakeAWishRoot(
    AbstractForm, ExtendedMetadataHomePageMixin, MetadataPageMixin, Page
):
    main_text = models.TextField(verbose_name="Hlavní text")
    success_text = models.TextField(verbose_name="Text po odeslání formuláře")

    header_image = models.ForeignKey(
        "wagtailimages.Image",
        on_delete=models.PROTECT,
        blank=True,
        null=True,
        related_name="+",
        verbose_name="Obrázek v headeru",
    )

    new_wish_image = models.ForeignKey(
        "wagtailimages.Image",
        on_delete=models.PROTECT,
        blank=True,
        null=True,
        related_name="+",
        verbose_name="Obrázek k novému přání",
    )

    video_url = models.URLField(
        verbose_name="URL Videa vpravo", help_text="Automaticky se spustí bez zvuku"
    )

    common_wishes = StreamField(
        [("wish", CommonWishBlock())], verbose_name="Nejčastější přání"
    )

    tour_dates = StreamField(
        [("tour_date", TourDateBlock())], verbose_name="Tour termíny"
    )

    stats = StreamField([("stat", StatBlock())], verbose_name="Statistiky")

    matomo_id = models.IntegerField(
        "Matomo ID pro sledování návštěvnosti", blank=True, null=True
    )

    content_panels = Page.content_panels + [
        FieldPanel("main_text"),
        FieldPanel("success_text"),
        FieldPanel("header_image"),
        FieldPanel("new_wish_image"),
        FieldPanel("video_url"),
        FieldPanel("common_wishes"),
        FieldPanel("tour_dates"),
        FieldPanel("stats"),
        InlinePanel("form_fields", label="Formulář - neměnit!!"),
    ]

    promote_panels = make_promote_panels() + [FieldPanel("matomo_id")]

    submissions_panels = [FormSubmissionsPanel()]

    edit_handler = TabbedInterface(
        [
            ObjectList(content_panels, heading="Obsah"),
            ObjectList(promote_panels, heading="Metadata"),
            ObjectList(submissions_panels, heading="Data z formuláře"),
        ]
    )

    class Meta:
        verbose_name = "Máte přání"