from django import forms

from .models import ContactEnquiry, CustomerReview, Destination, GoogleSettings, HomePageSettings, HolidayPackage, SEOSettings, WebsiteSettings


class WebsiteSettingsForm(forms.ModelForm):
    class Meta:
        model = WebsiteSettings
        fields = [
            "logo",
            "company_name",
            "email",
            "phone_number",
            "whatsapp_number",
            "address",
            "footer_text",
            "business_hours",
            "facebook_url",
            "instagram_url",
            "youtube_url",
            "x_url",
        ]


class SEOSettingsForm(forms.ModelForm):
    class Meta:
        model = SEOSettings
        fields = [
            "meta_title",
            "meta_description",
            "meta_keywords",
            "canonical_url",
            "open_graph_image",
            "robots_index",
            "robots_follow",
        ]


class GoogleSettingsForm(forms.ModelForm):
    class Meta:
        model = GoogleSettings
        fields = [
            "ga4_measurement_id",
            "gtm_container_id",
            "search_console_verification",
            "meta_pixel_id",
        ]


class HomePageSettingsForm(forms.ModelForm):
    hero_images_text = forms.CharField(
        required=False,
        widget=forms.Textarea(attrs={"rows": 5, "placeholder": "Enter one hero image URL or path per line."}),
    )
    featured_destinations = forms.ModelMultipleChoiceField(
        queryset=Destination.objects.none(),
        required=False,
        widget=forms.SelectMultiple(attrs={"class": "form-select", "size": "8"}),
    )
    featured_packages = forms.ModelMultipleChoiceField(
        queryset=HolidayPackage.objects.none(),
        required=False,
        widget=forms.SelectMultiple(attrs={"class": "form-select", "size": "8"}),
    )

    class Meta:
        model = HomePageSettings
        fields = ["hero_title", "hero_subtitle", "hero_button_text", "hero_button_url"]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["featured_destinations"].queryset = Destination.objects.filter(is_active=True)
        self.fields["featured_packages"].queryset = HolidayPackage.objects.filter(is_active=True)

        if self.instance and self.instance.pk:
            self.fields["hero_images_text"].initial = "\n".join(self.instance.hero_images or [])
            self.fields["featured_destinations"].initial = self.instance.featured_destinations.all()
            self.fields["featured_packages"].initial = self.instance.featured_packages.all()

    def clean_hero_images_text(self):
        value = self.cleaned_data.get("hero_images_text", "")
        return [line.strip() for line in value.splitlines() if line.strip()]

    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.hero_images = self.cleaned_data.get("hero_images_text", [])
        if commit:
            instance.save()
            self.save_m2m()
        return instance

    def save_m2m(self):
        super().save_m2m()
        if self.instance.pk:
            self.instance.featured_destinations.set(self.cleaned_data.get("featured_destinations", []))
            self.instance.featured_packages.set(self.cleaned_data.get("featured_packages", []))


class ContactEnquiryStatusForm(forms.ModelForm):
    class Meta:
        model = ContactEnquiry
        fields = ["status", "admin_notes"]
        widgets = {
            "admin_notes": forms.Textarea(attrs={"rows": 2}),
        }


class CustomerReviewModerationForm(forms.ModelForm):
    class Meta:
        model = CustomerReview
        fields = ["status", "admin_notes"]
        widgets = {
            "admin_notes": forms.Textarea(attrs={"rows": 2}),
        }