from django.utils.translation import gettext_lazy as _
from wagtail.admin.ui.tables import BooleanColumn, DateColumn
from wagtail.admin.ui.tables.pages import PageStatusColumn, PageTitleColumn
from wagtail.admin.viewsets.pages import PageListingViewSet, PageViewSet

from dnscms.admin import ListingRedirectChooseParentView
from venues.models import VenuePage


class VenueChooseParentView(ListingRedirectChooseParentView):
    listing_url_name = "venues:index"


class VenueListingMixin:
    """Shared model + columns for the standalone listing and the page explorer."""

    model = VenuePage
    icon = "home"
    columns = [
        PageTitleColumn("title", label=_("Title"), sort_key="title", classname="title"),
        BooleanColumn(
            "show_as_bookable",
            label=_("Rentals page"),
            sort_key="show_as_bookable",
            width="10%",
        ),
        BooleanColumn(
            "show_in_overview",
            label=_("Venue overview"),
            sort_key="show_in_overview",
            width="10%",
        ),
        DateColumn(
            "latest_revision_created_at",
            label=_("Updated"),
            sort_key="latest_revision_created_at",
            width="10%",
        ),
        PageStatusColumn("status", label=_("Status"), sort_key="live", width="10%"),
    ]


class VenueSidebarViewSet(VenueListingMixin, PageListingViewSet):
    """Standalone 'Venues' sidebar entry, reached independently of the page tree."""

    choose_parent_view_class = VenueChooseParentView
    menu_label = _("Venues")
    menu_order = 4
    add_to_admin_menu = True
    ordering = "title"


class VenueExplorerViewSet(VenueListingMixin, PageViewSet):
    """Applies the same columns when navigating into VenueIndex via the page explorer."""


venue_sidebar_viewset = VenueSidebarViewSet("venues")
venue_explorer_viewset = VenueExplorerViewSet()
