from django.contrib import admin

from .models import (
    Season,
    SeasonCompetitionCalendarSlot,
    SeasonOrchestrationRun,
    SeasonOrchestrationStep,
)


@admin.register(Season)
class SeasonAdmin(admin.ModelAdmin):
    list_display = (
        "name",
        "year",
        "start_date",
        "end_date",
        "status",
        "activated_at",
        "completed_at",
        "archived_at",
    )
    list_filter = ("status", "year")
    search_fields = ("name",)
    ordering = ("-start_date", "-id")
    readonly_fields = (
        "id", "name", "year", "start_date", "end_date", "status",
        "created_at", "updated_at", "activated_at", "completed_at", "archived_at",
    )

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return True

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


class SeasonOrchestrationStepInline(admin.TabularInline):
    model = SeasonOrchestrationStep
    extra = 0
    can_delete = False
    readonly_fields = (
        "id", "ordinal", "step_key", "status", "attempt_count", "input_hash",
        "result_hash", "error_code", "error_message", "started_at", "completed_at",
        "failed_at", "created_at", "updated_at",
    )
    fields = readonly_fields

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


@admin.register(SeasonOrchestrationRun)
class SeasonOrchestrationRunAdmin(admin.ModelAdmin):
    list_display = (
        "id", "source_season", "target_season", "status", "current_step",
        "attempt_count", "created_at", "completed_at",
    )
    list_filter = ("status", "policy_version")
    search_fields = ("source_season__name", "target_season__name", "request_hash", "result_hash")
    ordering = ("-created_at",)
    inlines = [SeasonOrchestrationStepInline]
    readonly_fields = (
        "id", "source_season", "target_season", "policy_key", "policy_version",
        "schema_version", "status", "current_step", "attempt_count", "request_payload",
        "request_hash", "result_payload", "result_hash", "error_code", "error_message",
        "started_at", "completed_at", "failed_at", "created_at", "updated_at",
    )

    def has_add_permission(self, request):
        return False

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


@admin.register(SeasonCompetitionCalendarSlot)
class SeasonCompetitionCalendarSlotAdmin(admin.ModelAdmin):
    list_display = (
        "scheduled_date", "season", "source_type", "phase", "sequence",
        "league_competition", "federation_competition",
    )
    list_filter = ("source_type", "phase", "season")
    ordering = ("scheduled_date", "source_type", "sequence")
    readonly_fields = (
        "id", "run", "season", "source_type", "league_competition",
        "federation_competition", "phase", "sequence", "scheduled_date",
        "metadata", "evidence_hash", "created_at",
    )

    def has_add_permission(self, request):
        return False

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