import json

from django import forms

from apps.core.forms import DateTimeLocalInput, StyledFormMixin
from apps.medialib.models import MediaAsset

from .models import Publicite


class PubliciteForm(StyledFormMixin, forms.ModelForm):
    class Meta:
        model = Publicite
        fields = ["titre", "annonceur", "image", "lien", "position", "actif", "date_debut", "date_fin"]
        widgets = {"image": forms.HiddenInput(), "date_debut": DateTimeLocalInput(), "date_fin": DateTimeLocalInput()}
        error_messages = {"image": {"required": "Choisissez ou téléversez un visuel."}}

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["image"].queryset = MediaAsset.objects.filter(type=MediaAsset.Kind.IMAGE)
        for f in ("date_debut", "date_fin"):
            self.fields[f].input_formats = ["%Y-%m-%dT%H:%M"]

    def clean(self):
        data = super().clean()
        d1, d2 = data.get("date_debut"), data.get("date_fin")
        if d1 and d2 and d2 < d1:
            self.add_error("date_fin", "La fin de diffusion doit être postérieure au début.")
        return data

    def image_initial(self):
        asset = self.instance.image if self.instance.image_id else None
        if self.data.get("image"):
            asset = MediaAsset.objects.filter(pk=self.data["image"]).first()
        return json.dumps([{"id": asset.pk, "url": asset.variant_url("md"), "name": str(asset), "type": asset.type}] if asset else [])
