from django.contrib import admin

from .models import AICall, CallEvaluation, CallTranscriptUtterance


class CallTranscriptUtteranceInline(admin.TabularInline):
    model = CallTranscriptUtterance
    extra = 0
    ordering = ("sequence", "id")
    readonly_fields = ("created_at",)


class CallEvaluationInline(admin.StackedInline):
    model = CallEvaluation
    extra = 0
    readonly_fields = ("created_at", "updated_at")


@admin.register(AICall)
class AICallAdmin(admin.ModelAdmin):
    """Admin configuration for AICall."""

    list_display = (
        "id",
        "candidate",
        "job",
        "status",
        "attempts",
        "score",
        "recommendation",
        "started_at",
        "duration",
        "created_at",
    )
    list_filter = ("status", "recommendation", "created_at")
    search_fields = (
        "candidate__first_name",
        "candidate__last_name",
        "job__title",
        "provider_call_id",
    )
    raw_id_fields = ("candidate", "job", "application", "created_by")
    readonly_fields = ("created_at", "updated_at")
    inlines = [CallEvaluationInline, CallTranscriptUtteranceInline]
    ordering = ("-updated_at",)


@admin.register(CallTranscriptUtterance)
class CallTranscriptUtteranceAdmin(admin.ModelAdmin):
    """Admin configuration for CallTranscriptUtterance."""

    list_display = (
        "id",
        "call",
        "sequence",
        "speaker",
        "message_preview",
        "interrupted",
        "created_at",
    )
    list_filter = ("speaker", "interrupted", "language", "created_at")
    search_fields = (
        "call__id",
        "call__candidate__first_name",
        "call__candidate__last_name",
        "message",
    )
    raw_id_fields = ("call",)
    readonly_fields = ("created_at",)
    ordering = ("call", "sequence", "id")

    def message_preview(self, obj):
        if obj.message:
            return obj.message[:50] + "..." if len(obj.message) > 50 else obj.message
        return ""

    message_preview.short_description = "Message"


@admin.register(CallEvaluation)
class CallEvaluationAdmin(admin.ModelAdmin):
    """Admin configuration for CallEvaluation."""

    list_display = (
        "id",
        "call",
        "overall_score",
        "technical_score",
        "communication_score",
        "experience_score",
        "confidence_score",
        "classification",
        "recommendation",
        "created_at",
    )
    list_filter = ("classification", "recommendation", "created_at")
    search_fields = (
        "call__id",
        "call__candidate__first_name",
        "call__candidate__last_name",
        "summary",
    )
    raw_id_fields = ("call",)
    readonly_fields = ("created_at", "updated_at")
    ordering = ("-updated_at",)
