from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import Report, Category, TeamMember, MyModel, Subscriber, Year, MyModelVisits, SearchTermQuery,SearchQuery, Term, Bookmark, UserProfile, Popularity, ContactMessage

from django.contrib import admin
from .models import ContactMessage
from django.utils import timezone
from datetime import timedelta
from .models import SuspiciousLog
@admin.register(Report)
class ReportAdmin(admin.ModelAdmin):
    # Kolom yang ditampilkan di daftar laporan
    list_display = ('url', 'description', 'created_at', 'user', 'ip_address')

    # Filter berdasarkan tanggal dan pengguna
    list_filter = ('created_at', 'user')

    # Pencarian berdasarkan URL dan keterangan
    search_fields = ('url', 'description')

    # Field yang tidak bisa diubah di admin
    readonly_fields = ('created_at', 'ip_address')

    # Opsi tambahan: urutan field di halaman detail
    fieldsets = [
        (None, {'fields': ['url', 'description']}),
        ('Informasi Tambahan', {'fields': ['user', 'ip_address', 'created_at']}),
    ]

@admin.register(SuspiciousLog)
class SuspiciousLogAdmin(admin.ModelAdmin):
    list_display = ("ip", "count", "timestamp", "blocked")  # Tampilkan kolom ini
    list_filter = ("blocked",)  # Bisa filter berdasarkan status blokir
    search_fields = ("ip",)  # Bisa cari berdasarkan IP
    actions = ["unblock_selected"]

    @admin.action(description="Buka blokir IP yang dipilih")
    def unblock_selected(self, request, queryset):
        queryset.update(blocked=False)

@admin.register(ContactMessage)
class ContactMessageAdmin(admin.ModelAdmin):
    # Menampilkan kolom yang diinginkan di tampilan admin
    list_display = ('name', 'email', 'message_preview', 'submitted_at', 'status', 'mark_as_read')

    # Menambahkan pencarian berdasarkan kolom tertentu
    search_fields = ('name', 'email')

    # Menambahkan filter berdasarkan tanggal dan status
    list_filter = ('submitted_at', 'status')  # Menambahkan filter berdasarkan status

    # Menambahkan preview pesan (opsional)
    def message_preview(self, obj):
        return obj.message[:50]  # Menampilkan 50 karakter pertama dari pesan
    message_preview.short_description = "Message Preview"

    # Tambahkan kolom untuk menandai pesan sebagai sudah dibaca
    def mark_as_read(self, obj):
        return "Yes" if obj.status == 'read' else "No"
    mark_as_read.short_description = "Read Status"

    # Menambahkan aksi untuk menandai pesan sebagai sudah dibaca atau belum dibaca
    actions = ['mark_messages_as_read', 'mark_messages_as_unread']

    def mark_messages_as_read(self, request, queryset):
        updated_count = queryset.update(status='read')
        self.message_user(request, f"{updated_count} messages marked as read.")
    mark_messages_as_read.short_description = "Mark selected messages as read"

    def mark_messages_as_unread(self, request, queryset):
        updated_count = queryset.update(status='unread')
        self.message_user(request, f"{updated_count} messages marked as unread.")
    mark_messages_as_unread.short_description = "Mark selected messages as unread"

    # Membuat seluruh interface admin hanya bisa dilihat, tanpa edit atau hapus
    def has_add_permission(self, request):
        return False  # Tidak bisa menambah data

    def has_change_permission(self, request, obj=None):
        return False  # Tidak bisa mengubah data

    def has_delete_permission(self, request, obj=None):
        return False  # Tidak bisa menghapus data

    
class TermInline(admin.TabularInline):
    model = Term.my_models.through
    extra = 1
    fields = ('term',)  # This is the correct way to include relationship fields


from django.contrib import admin

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = ('short_data', 'category', 'year', 'is_verified')  # Tambahkan 'is_verified' ke list_display
    list_editable = ('is_verified',)  # Tambahkan 'is_verified' ke list_editable
    inlines = [TermInline]
    search_fields = ['data__Judul', 'data__Nomor', 'data__Tentang', 'year__year']
    list_filter = ('category', 'year')

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if 'year' in request.GET:
            year_id = request.GET['year']
            qs = qs.filter(year_id=year_id)
        if 'category' in request.GET:
            category_id = request.GET['category']
            qs = qs.filter(category_id=category_id)
        return qs

    def short_data(self, obj):
        # Jika kategori adalah "Konstitusi", tampilkan Judul dan Versi
        if obj.category and obj.category.name == "Konstitusi":
            judul = obj.data.get('Judul', 'Undang-Undang Dasar Negara Republik Indonesia Tahun 1945')
            versi = obj.data.get('versi', 'Versi tidak tersedia')
            return f"{judul} ({versi})"
        else:
            # Untuk kategori lainnya, gunakan format "UU No <Nomor> Tahun <Tahun>"
            nomor = obj.data.get('Nomor', 'Unknown Number')
            tentang = obj.data.get('Tentang', 'Unknown')
            tahun = obj.year.year if obj.year else 'Unknown Year'
            return f"UU No {nomor} Tahun {tahun} Tentang {tentang}"
    short_data.short_description = 'Data'  # Nama kolom di admin interface

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'view_related_regulations_link')

    def view_related_regulations_link(self, obj):
        url = reverse('admin:regulations_mymodel_changelist') + f'?category={obj.pk}'
        return format_html('<a href="{}">View Regulations</a>', url)
    view_related_regulations_link.short_description = 'Related Regulations'

@admin.register(Year)
class YearAdmin(admin.ModelAdmin):
    list_display = ('year', 'view_related_regulations_link')

    def view_related_regulations_link(self, obj):
        url = reverse('admin:regulations_mymodel_changelist') + f'?year={obj.pk}'
        return format_html('<a href="{}">View Regulations</a>', url)
    view_related_regulations_link.short_description = 'Related Regulations'

@admin.register(MyModelVisits)
class MyModelVisitsAdmin(admin.ModelAdmin):
    list_display = ('uu', 'user_ip', 'visited_at', 'user', 'device_type', 'platform_type', 'browser_type')
    list_filter = ('visited_at',)

@admin.register(SearchQuery)
class SearchQueryAdmin(admin.ModelAdmin):
    list_display = ('query', 'created_at')
    search_fields = ('query',)

@admin.register(SearchTermQuery)
class SearchTermQueryAdmin(admin.ModelAdmin):
    list_display = ('query', 'created_at')
    search_fields = ('query',)

@admin.register(Term)
class TermAdmin(admin.ModelAdmin):
    list_display = ('name', 'short_definition')
    list_filter = ('my_models',)
    search_fields = ('name', 'definition')

    def short_definition(self, obj):
        return obj.definition[:75]  # Truncate to 75 characters
    short_definition.short_description = 'Definition'

@admin.register(Popularity)
class PopularityAdmin(admin.ModelAdmin):
    list_display = ('uu', 'view_count')
    search_fields = ('uu__data',)
    list_filter = ('view_count',)

@admin.register(TeamMember)
class TeamMemberAdmin(admin.ModelAdmin):
    list_display = ('name', 'role', 'linkedin_url')
    search_fields = ('name', 'role')

@admin.register(Bookmark)
class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('user', 'regulation', 'last_read_position', 'url')
    search_fields = ('user__username', 'regulation__data')

class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'job', 'province', 'birth_date')
    list_filter = ('job', 'province')
    search_fields = ('first_name', 'last_name', 'job', 'province')

admin.site.register(UserProfile, UserProfileAdmin)

@admin.register(Subscriber)
class SubscriberAdmin(admin.ModelAdmin):
    list_display = ('email', 'subscribed_at')  # Kolom yang akan ditampilkan
    search_fields = ('email',)                # Tambahkan pencarian berdasarkan email
    ordering = ('-subscribed_at',)           # Urutkan berdasarkan waktu berlangganan


from .models import ArticleSuggestion
from django.utils import timezone
 
@admin.register(ArticleSuggestion)
class ArticleSuggestionAdmin(admin.ModelAdmin):
    list_display    = ('article_key', 'regulation', 'user', 'status', 'created_at')
    list_filter     = ('status', 'created_at')
    search_fields   = ('article_key', 'user__username')
    readonly_fields = ('original_text', 'created_at', 'user', 'regulation',
                       'article_key', 'article_path')
    actions = ['approve', 'reject']
 
    @admin.action(description='Setujui saran yang dipilih')
    def approve(self, request, queryset):
        queryset.update(status='approved', reviewed_by=request.user, reviewed_at=timezone.now())
 
    @admin.action(description='Tolak saran yang dipilih')
    def reject(self, request, queryset):
        queryset.update(status='rejected', reviewed_by=request.user, reviewed_at=timezone.now())