from django.contrib import admin
from django.utils.translation import gettext_lazy as _

from .models import Position, RefereeLevel, RefereeProfile, StaffAssignment, Team, TeamMembership, TeamPhoto


class TeamMembershipInline(admin.TabularInline):
    """Roster shown on the Team page."""

    model = TeamMembership
    extra = 0
    raw_id_fields = ("member",)


class StaffAssignmentInline(admin.TabularInline):
    """Coaching / staff shown on the Team page."""

    model = StaffAssignment
    extra = 0
    raw_id_fields = ("member",)


class TeamPhotoInline(admin.TabularInline):
    """One photo per season, shown on the Team page."""

    model = TeamPhoto
    extra = 0


@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
    list_display = ["name", "short_name", "club", "referee_management"]
    list_filter = ["club", "referee_management"]
    search_fields = ["name", "short_name"]
    inlines = [TeamMembershipInline, StaffAssignmentInline, TeamPhotoInline]


@admin.register(TeamPhoto)
class TeamPhotoAdmin(admin.ModelAdmin):
    list_display = ["team", "season"]
    list_filter = ["team__club", "season"]
    search_fields = ["team__name"]


@admin.register(Position)
class PositionAdmin(admin.ModelAdmin):
    list_display = ["name", "short_name", "club", "staff_position", "ordering"]
    list_filter = ["club", "staff_position"]
    search_fields = ["name", "short_name"]
    ordering = ["ordering", "name"]


@admin.register(TeamMembership)
class TeamMembershipAdmin(admin.ModelAdmin):
    list_display = ["team", "member", "season", "position", "jersey_number", "is_captain", "is_alternate_captain"]
    list_filter = ["team", "season", "position", "is_captain"]
    search_fields = ["team__name", "member__first_name", "member__last_name"]
    raw_id_fields = ["member"]
    fieldsets = [
        [None, {"fields": ["team", "season", "member", "position"]}],
        [_("Squad"), {"fields": ["jersey_number", "is_captain", "is_alternate_captain"]}],
    ]


@admin.register(StaffAssignment)
class StaffAssignmentAdmin(admin.ModelAdmin):
    list_display = ["team", "member", "season", "position"]
    list_filter = ["team", "season", "position"]
    search_fields = ["team__name", "member__first_name", "member__last_name"]
    raw_id_fields = ["member"]


@admin.register(RefereeLevel)
class RefereeLevelAdmin(admin.ModelAdmin):
    list_display = ["name", "club", "inherits_from", "team_list"]
    list_filter = ["club"]
    search_fields = ["name"]
    autocomplete_fields = ["teams", "inherits_from"]
    ordering = ["club", "name"]

    @admin.display(description=_("teams"))
    def team_list(self, obj):
        return ", ".join(team.name for team in obj.teams.all())


@admin.register(RefereeProfile)
class RefereeProfileAdmin(admin.ModelAdmin):
    list_display = ["member", "level", "valid_until", "is_eligible"]
    list_filter = ["level"]
    search_fields = ["member__first_name", "member__last_name"]
    autocomplete_fields = ["member"]

    @admin.display(description=_("eligible"), boolean=True)
    def is_eligible(self, obj):
        return obj.is_eligible
