from django.contrib import admin

from .models import (
    MatchExperienceDevelopmentResult,
    PlayerAttributeRatingChange,
    PlayerDevelopmentProgress,
    PlayerRatingMaterializationRun,
    PlayerSeasonAgingResult,
    TrainingDevelopmentResult,
    TrainingParticipant,
    TrainingSession,
)


class ReadOnlyDomainAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

    def get_readonly_fields(self, request, obj=None):
        return tuple(field.name for field in self.model._meta.fields)


@admin.register(TrainingSession)
class TrainingSessionAdmin(ReadOnlyDomainAdmin):
    list_display = ("id", "session_type", "status", "training_date", "club", "target_attribute")
    list_filter = ("session_type", "status", "target_attribute")


@admin.register(TrainingParticipant)
class TrainingParticipantAdmin(ReadOnlyDomainAdmin):
    list_display = ("session", "player", "created_at")


@admin.register(TrainingDevelopmentResult)
class TrainingDevelopmentResultAdmin(ReadOnlyDomainAdmin):
    list_display = ("player", "attribute_name", "training_date", "final_effect", "progress_after")
    list_filter = ("attribute_name",)


@admin.register(PlayerDevelopmentProgress)
class PlayerDevelopmentProgressAdmin(ReadOnlyDomainAdmin):
    list_display = ("player", "attribute_name", "total_points", "consumed_points", "updated_at")
    list_filter = ("attribute_name",)


@admin.register(MatchExperienceDevelopmentResult)
class MatchExperienceDevelopmentResultAdmin(ReadOnlyDomainAdmin):
    list_display = ("player", "attribute_name", "credit", "progress_before", "progress_after", "created_at")
    list_filter = ("attribute_name",)
    search_fields = ("player__first_name", "player__last_name", "dynamic_effect__match__id")


@admin.register(PlayerRatingMaterializationRun)
class PlayerRatingMaterializationRunAdmin(ReadOnlyDomainAdmin):
    list_display = ("player", "trigger_type", "observed_on", "age_years", "overall_before", "overall_after", "total_credit_consumed", "retirement_eligible")
    list_filter = ("trigger_type", "retirement_eligible")


@admin.register(PlayerAttributeRatingChange)
class PlayerAttributeRatingChangeAdmin(ReadOnlyDomainAdmin):
    list_display = ("run", "attribute_name", "rating_before", "rating_after", "rating_delta", "credit_consumed")
    list_filter = ("attribute_name",)


@admin.register(PlayerSeasonAgingResult)
class PlayerSeasonAgingResultAdmin(ReadOnlyDomainAdmin):
    list_display = ("player", "season", "age_years", "base_decline_points", "applied_decline_points", "training_protection", "retirement_eligible")
    list_filter = ("season", "retirement_eligible")

from .models import PlayerLegacyAsset, PlayerLegacyAssetAssignment


@admin.register(PlayerLegacyAsset)
class PlayerLegacyAssetAdmin(ReadOnlyDomainAdmin):
    list_display = ("owner", "asset_type", "level", "origin_player", "assigned_player", "created_at")
    list_filter = ("asset_type", "level")
    search_fields = ("owner__email", "origin_player__first_name", "origin_player__last_name")


@admin.register(PlayerLegacyAssetAssignment)
class PlayerLegacyAssetAssignmentAdmin(ReadOnlyDomainAdmin):
    list_display = ("asset", "event_type", "from_player", "to_player", "retirement_case", "created_at")
    list_filter = ("event_type",)
