from django import forms
from django.contrib import admin
from .models import (
    Call, CallActivity, TonyCall,
    UserMessage, Notification,
    BotInstructionTemplate,
)
from ..companies.constants import BotInstructionTemplateType, BotName


@admin.register(Call)
class CallAdmin(admin.ModelAdmin):
    list_display = ['from_number', 'to_number', 'bot_type', 'id', 'transfer_number', 'status', 'duration', 'cost', 'created_at',]
    list_filter = ['company', 'bot_type', 'transfer_status', 'booking_intent']
    search_fields = ['from_number', 'to_number', 'call_id', 'twilio_call_sid']
    ordering = ['-created_at']

@admin.register(CallActivity)
class CallActivityAdmin(admin.ModelAdmin):
    list_display = ['call', 'user', 'action', 'performed_at', 'duration_played', 'id']
    list_filter = ['action', 'performed_at']
    search_fields = ['call__call_id', 'user__username']
    ordering = ['-performed_at']

@admin.register(TonyCall)
class TonyCallAdmin(admin.ModelAdmin):
    list_display = ['called_to', 'status', 'company', 'rescheduled', 'created_at', 'call_date_time', 'id']
    list_filter = ['intention', 'status']
    search_fields = ['company__name', 'called_number', 'called_to']
    ordering = ['-created_at']

@admin.register(UserMessage)
class MessageAdmin(admin.ModelAdmin):
    list_display = ['subject', 'recipient', 'is_read', 'read_at', 'id']
    list_filter = ['subject', 'is_read', 'recipient__username']
    search_fields = ['recipient__username']
    ordering = ['-created_at']

@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display = ['title', 'recipient', 'is_read', 'read_at', 'id']
    list_filter = ['is_read', 'recipient__username']
    search_fields = ['recipient__username']
    ordering = ['-created_at']

class BotInstructionTemplateAdminForm(forms.ModelForm):
    template_type = forms.ChoiceField(
        choices=BotInstructionTemplateType.model_choices()
    )
    bot_name = forms.ChoiceField(
        choices=BotName.model_choices()
    )

    class Meta:
        model = BotInstructionTemplate
        fields = "__all__"

@admin.register(BotInstructionTemplate)
class BotInstructionTemplateAdmin(admin.ModelAdmin):
    form = BotInstructionTemplateAdminForm

    list_display = (
        "company",
        "bot_name",
        "template_type",
        "title",
        "is_active",
        "updated_at",
    )

    list_filter = (
        "company",
        "bot_name",
        "template_type",
        "is_active",
    )

    search_fields = (
        "company__name",
        "title",
        "content",
    )

    # ordering = ("company", "bot_name", "template_type")
    ordering = ("-created_at",)

    fieldsets = (
        ("Bot Configuration", {
            "fields": (
                "company",
                "bot_name",
                "template_type",
                "title",
                "is_active",
            )
        }),
        ("Template Content", {
            "fields": (
                "content",
            ),
            "description": (
                "You can use placeholders:\n"
                "{advisor_name}, {advisor_phone}, {dealership_name}, {dealership_phone}"
            )
        }),
    )

    readonly_fields = ("created_at", "updated_at")
