from django.contrib import admin
from .models import (
    Guideline,
    OwnerInfo,
    FAQ,
    Message,
    PageSection,
    PageSectionItem,
    Tag,
    Category,
    Page,
)
from django import forms
from django.utils import timezone
from django.utils.safestring import mark_safe
from .models import AdvertiseContent, AdvertiseImage


class AdvertiseImageInline(admin.TabularInline):
    model = AdvertiseImage
    extra = 1


@admin.register(AdvertiseContent)
class AdvertiseContentAdmin(admin.ModelAdmin):
    list_display = ('name', 'type','is_active', 'created_at')
    list_filter = ('type',)
    search_fields = ('name',)
    inlines = [AdvertiseImageInline]

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ("name",)
    search_fields = ("name",)


# ===== GUIDELINE ADMIN =====
class GuidelineAdminForm(forms.ModelForm):
    class Meta:
        model = Guideline
        fields = "__all__"
        help_texts = {
            "slug": "URL-friendly version of the title (auto-generated if blank)",
            "short_description": "Brief summary displayed in listing pages (max 500 characters)",
        }
        widgets = {
            "short_description": forms.Textarea(attrs={"rows": 3}),
        }


@admin.register(Guideline)
class GuidelineAdmin(admin.ModelAdmin):
    form = GuidelineAdminForm
    list_display = [
        "title",
        "country_display",
        "study_level_display",
        "status",
        "is_featured",
        "views_count",
        "order",
        "published_date",
        "display_featured_image",
    ]

    list_filter = [
        "country",
        "study_level",
        "status",
        "is_featured",
        "published_date",
    ]

    search_fields = [
        "title",
        "short_description",
        "overview",
    ]

    list_editable = [
        "status",
        "is_featured",
        "order",
    ]

    readonly_fields = [
        "views_count",
        "created_at",
        "updated_at",
        "published_date",
        "display_featured_image_preview",
        "display_country_flag_preview",
    ]

    prepopulated_fields = {"slug": ("title",)}

    def country_display(self, obj):
        return obj.get_country_display()

    country_display.short_description = "Country"

    def study_level_display(self, obj):
        return obj.get_study_level_display()

    study_level_display.short_description = "Study Level"

    def display_featured_image(self, obj):
        if obj.featured_image:
            return mark_safe(
                f'<img src="{obj.featured_image.url}" width="50" height="30" style="object-fit: cover;" />'
            )
        return "No Image"

    display_featured_image.short_description = "Image"

    def display_featured_image_preview(self, obj):
        if obj.featured_image:
            return mark_safe(
                f'<img src="{obj.featured_image.url}" width="200" style="max-height: 150px; object-fit: contain;" />'
            )
        return "No featured image uploaded"

    display_featured_image_preview.short_description = "Featured Image Preview"

    def display_country_flag_preview(self, obj):
        if obj.country_flag:
            return mark_safe(
                f'<img src="{obj.country_flag.url}" width="100" style="max-height: 60px; object-fit: contain;" />'
            )
        return "No country flag uploaded"

    display_country_flag_preview.short_description = "Country Flag Preview"

    def save_model(self, request, obj, form, change):
        if (
            "status" in form.changed_data
            and obj.status == "published"
            and not obj.published_date
        ):
            obj.published_date = timezone.now()
        super().save_model(request, obj, form, change)

    fieldsets = (
        (
            "Basic Information",
            {
                "fields": (
                    "title",
                    "slug",
                    "country",
                    "study_level",
                    "short_description",
                    "status",
                    "is_featured",
                    "order",
                )
            },
        ),
        (
            "Content Sections",
            {
                "fields": (
                    "overview",
                    "eligibility_criteria",
                    "language_requirements",
                    "financial_requirements",
                    "application_process",
                    "deadline_information",
                    "visa_process",
                )
            },
        ),
        (
            "Costs & Additional Info",
            {
                "fields": (
                    "tuition_fees",
                    "living_costs",
                    "scholarship_info",
                    "working_while_studying",
                    "post_study_options",
                    "useful_resources",
                )
            },
        ),
        (
            "Media",
            {
                "fields": (
                    "featured_image",
                    "display_featured_image_preview",
                    "country_flag",
                    "display_country_flag_preview",
                )
            },
        ),
        (
            "SEO & Metadata",
            {
                "fields": (
                    "meta_title",
                    "meta_description",
                    "views_count",
                    "published_date",
                ),
                "classes": ("collapse",),
            },
        ),
        (
            "Timestamps",
            {
                "fields": (
                    "created_at",
                    "updated_at",
                ),
                "classes": ("collapse",),
            },
        ),
    )


class PageAdminForm(forms.ModelForm):
    class Meta:
        model = Page
        fields = "__all__"
        help_texts = {
            "name": 'Enter a unique name for the page (e.g., "Home", "About Us").',
            "slug": 'URL-friendly version of the name (e.g., "home", "about-us").',
            "title": "Enter the main title for the page (optional).",
            "description": "Provide the main content/description of the page using rich text editor.",
            "meta_description": "Provide SEO meta description (optional).",
            "is_active": "Toggle to show/hide the page on the website.",
            "order": "Set the display order (lower numbers appear first).",
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["slug"].widget.attrs.update(
            {
                "placeholder": "about-us",
            }
        )
        self.fields["name"].widget.attrs.update(
            {
                "placeholder": "About Us",
            }
        )


class PageSectionAdminForm(forms.ModelForm):
    class Meta:
        model = PageSection
        fields = "__all__"
        help_texts = {
            "page": "Select which page this section belongs to (optional).",
            "section_type": "Choose the type of section for layout purposes.",
            "name": 'Internal name for reference (e.g., "Hero Section", "Features Grid").',
            "title": "Main title for this section (optional).",
            "subtitle": "Subtitle or brief description (optional).",
            "description": "Detailed content for this section using rich text editor.",
            "icon": "SVG or icon code (optional).",
            "image": "Upload a main image for this section.",
            "background_image": "Upload a background image for this section.",
            "content_alignment": "Choose how content should be aligned.",
            "background_color": "Hex color code for background (e.g., #f8f9fa).",
            "text_color": "Hex color code for text (e.g., #333333).",
            "is_visible": "Toggle to show/hide this section.",
            "order": "Display order within the page.",
            "key_points": 'Key points as JSON array (e.g., ["point1", "point2"]).',
            "metadata": "Additional configuration data as JSON.",
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["key_points"].widget.attrs.update(
            {
                "placeholder": '["Fast Delivery", "24/7 Support"]',
            }
        )
        self.fields["icon"].widget.attrs.update(
            {
                "placeholder": "<svg>...</svg> or icon class",
            }
        )
        self.fields["name"].widget.attrs.update(
            {
                "placeholder": "Hero Section",
            }
        )
        self.fields["background_color"].widget.attrs.update(
            {
                "placeholder": "#f8f9fa",
            }
        )
        self.fields["text_color"].widget.attrs.update(
            {
                "placeholder": "#333333",
            }
        )
        self.fields["metadata"].widget.attrs.update(
            {
                "placeholder": '{"columns": 3, "animation": "fade"}',
            }
        )


class PageSectionItemAdminForm(forms.ModelForm):
    class Meta:
        model = PageSectionItem
        fields = "__all__"
        help_texts = {
            "section": "Select which section this item belongs to.",
            "title": "Title for this item (optional).",
            "subtitle": "Subtitle or brief description (optional).",
            "description": "Detailed content using rich text editor.",
            "icon": "SVG or icon code for this item.",
            "image": "Upload an image for this item.",
            "key_points": "Key points as JSON array.",
            "metadata": "Additional item data as JSON.",
            "order": "Display order within the section.",
            "is_active": "Toggle to show/hide this item.",
            "button_text": "Text for call-to-action button (optional).",
            "button_url": "URL for the button (optional).",
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["key_points"].widget.attrs.update(
            {
                "placeholder": '["Feature 1", "Feature 2"]',
            }
        )
        self.fields["icon"].widget.attrs.update(
            {
                "placeholder": "<svg>...</svg>",
            }
        )
        self.fields["title"].widget.attrs.update(
            {
                "placeholder": "Amazing Feature",
            }
        )
        self.fields["button_text"].widget.attrs.update(
            {
                "placeholder": "Learn More",
            }
        )
        self.fields["button_url"].widget.attrs.update(
            {
                "placeholder": "/about or https://example.com",
            }
        )
        self.fields["metadata"].widget.attrs.update(
            {
                "placeholder": '{"rating": 5, "author": "John Doe"}',
            }
        )


class PageSectionItemInline(admin.StackedInline):
    model = PageSectionItem
    form = PageSectionItemAdminForm
    extra = 0
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "title",
                    "subtitle",
                    "description",
                    "order",
                    "is_active",
                )
            },
        ),
        ("Media", {"fields": ("icon", "image"), "classes": ("collapse",)}),
        ("Action", {"fields": ("button_text", "button_url"), "classes": ("collapse",)}),
        ("Advanced", {"fields": ("key_points", "metadata"), "classes": ("collapse",)}),
    )


class PageSectionInline(admin.StackedInline):
    model = PageSection
    form = PageSectionAdminForm
    extra = 0
    show_change_link = True
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "section_type",
                    "name",
                    "title",
                    "subtitle",
                    "description",
                    "order",
                    "is_visible",
                )
            },
        ),
        (
            "Media",
            {"fields": ("icon", "image", "background_image"), "classes": ("collapse",)},
        ),
        (
            "Styling",
            {
                "fields": ("content_alignment", "background_color", "text_color"),
                "classes": ("collapse",),
            },
        ),
        ("Advanced", {"fields": ("key_points", "metadata"), "classes": ("collapse",)}),
    )


@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
    form = PageAdminForm
    list_display = ("name", "slug", "is_active", "order", "sections_count")
    list_filter = ("is_active",)
    search_fields = ("name", "slug", "title")
    prepopulated_fields = {"slug": ("name",)}
    inlines = [PageSectionInline]

    def sections_count(self, obj):
        return obj.sections.count()

    sections_count.short_description = "Sections Count"


@admin.register(PageSection)
class PageSectionAdmin(admin.ModelAdmin):
    form = PageSectionAdminForm
    list_display = (
        "name",
        "page",
        "section_type",
        "is_visible",
        "order",
        "items_count",
        "display_image",
    )
    list_filter = ("section_type", "is_visible", "page")
    search_fields = ("name", "title", "page__name")
    list_editable = ("order", "is_visible")
    inlines = [PageSectionItemInline]

    def items_count(self, obj):
        return obj.items.count()

    items_count.short_description = "Items Count"

    def display_image(self, obj):
        if obj.image:
            return mark_safe(
                f'<img src="{obj.image.url}" width="40" height="40" style="object-fit: cover;"/>'
            )
        return "No Image"

    display_image.short_description = "Image"

 
@admin.register(PageSectionItem)
class PageSectionItemAdmin(admin.ModelAdmin):
    form = PageSectionItemAdminForm
    list_display = (
        "title",
        "section",
        "is_active",
        "order",
        "display_image",
    )
    list_filter = ("is_active", "section__page")
    search_fields = ("title", "subtitle", "section__name")
    list_editable = ("order", "is_active")

    def display_image(self, obj):
        if obj.image:
            return mark_safe(
                f'<img src="{obj.image.url}" width="40" height="40" style="object-fit: cover;"/>'
            )
        return "No Image"

    display_image.short_description = "Image"

@admin.register(OwnerInfo)
class OwnerInfoAdmin(admin.ModelAdmin):
    list_display = ("brand_name", "owner_name", "phone", "hotline", "business_address")
    search_fields = ("brand_name", "owner_name", "phone")


@admin.register(FAQ)
class FAQAdmin(admin.ModelAdmin):
    list_display = ("question", "answer")
    search_fields = ("question",)


@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
    list_display = ("id", "email", "phone", "subject")
    search_fields = ("email", "phone")


@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    list_display = ("name",)
    search_fields = ("name",)
