from django.contrib.admin import ModelAdmin
from django.contrib.admin.options import StackedInline
from django.forms import ModelForm
from django.urls import reverse_lazy

from judge.models import TicketMessage
from judge.widgets import (
    AdminHeavySelect2MultipleWidget,
    AdminHeavySelect2Widget,
    HeavyPreviewAdminPageDownWidget,
)


class TicketMessageForm(ModelForm):
    class Meta:
        widgets = {
            "user": AdminHeavySelect2Widget(
                data_view="profile_select2", attrs={"style": "width: 100%"}
            ),
        }
        if HeavyPreviewAdminPageDownWidget is not None:
            widgets["body"] = HeavyPreviewAdminPageDownWidget(
                preview=reverse_lazy("ticket_preview")
            )


class TicketMessageInline(StackedInline):
    model = TicketMessage
    form = TicketMessageForm
    fields = ("user", "body")


class TicketForm(ModelForm):
    class Meta:
        widgets = {
            "user": AdminHeavySelect2Widget(
                data_view="profile_select2", attrs={"style": "width: 100%"}
            ),
            "assignees": AdminHeavySelect2MultipleWidget(
                data_view="profile_select2", attrs={"style": "width: 100%"}
            ),
        }


class TicketAdmin(ModelAdmin):
    fields = (
        "title",
        "time",
        "user",
        "assignees",
        "content_type",
        "object_id",
        "notes",
    )
    readonly_fields = ("time",)
    list_display = ("title", "user", "time", "linked_item")
    inlines = [TicketMessageInline]
    form = TicketForm
    date_hierarchy = "time"