from django.contrib import admin
from .models import (
    Conversation, Message, ConversationVisibility, MessageReaction,
    ChatAppearance, ConversationMember, GroupJoinRequest, MessageRead
)


@admin.register(Conversation)
class ConversationAdmin(admin.ModelAdmin):
    list_display = ['id', 'is_group', 'name', 'admin', 'created_at', 'updated_at']
    list_filter = ['is_group', 'created_at']
    search_fields = ['participants__username', 'name']
    filter_horizontal = ['participants']
    raw_id_fields = ['admin', 'initiator']


@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
    list_display = ['id', 'conversation', 'sender', 'is_read', 'is_deleted', 'created_at']
    list_filter = ['is_read', 'is_deleted', 'created_at']
    search_fields = ['content', 'sender__username']
    raw_id_fields = ['conversation', 'sender', 'reply_to']


@admin.register(ConversationVisibility)
class ConversationVisibilityAdmin(admin.ModelAdmin):
    list_display = ['id', 'user', 'conversation', 'is_visible', 'hidden_until']
    list_filter = ['is_visible']
    raw_id_fields = ['user', 'conversation']


@admin.register(MessageReaction)
class MessageReactionAdmin(admin.ModelAdmin):
    list_display = ['id', 'message', 'user', 'emoji', 'created_at']
    list_filter = ['emoji', 'created_at']


@admin.register(ChatAppearance)
class ChatAppearanceAdmin(admin.ModelAdmin):
    list_display = ['id', 'conversation', 'bg_type', 'updated_at']
    list_filter = ['bg_type', 'display_mode']
    raw_id_fields = ['conversation']


@admin.register(ConversationMember)
class ConversationMemberAdmin(admin.ModelAdmin):
    list_display = ['id', 'conversation', 'user', 'is_muted', 'is_hidden', 'joined_at']
    list_filter = ['is_muted', 'is_hidden', 'joined_at']
    search_fields = ['user__username', 'conversation__name']
    raw_id_fields = ['conversation', 'user']


@admin.register(GroupJoinRequest)
class GroupJoinRequestAdmin(admin.ModelAdmin):
    list_display = ['id', 'conversation', 'user', 'requested_by', 'status', 'created_at']
    list_filter = ['status', 'created_at']
    search_fields = ['user__username', 'requested_by__username', 'conversation__name']
    raw_id_fields = ['conversation', 'user', 'requested_by']


@admin.register(MessageRead)
class MessageReadAdmin(admin.ModelAdmin):
    list_display = ['id', 'message', 'user', 'read_at']
    list_filter = ['read_at']
    raw_id_fields = ['message', 'user']

