from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User, TeacherProfile, StudentProfile, Rating, Product, Reservation, WikiPost, BlogEntry, SubjectResult, Course, Lesson, Enrollment, LessonCompletion, PDFSummary, SummaryPurchase

# ── Site Header ──
admin.site.site_header  = ' بوابة إدارة مدرسة عاطف خليل الزراعية'
admin.site.site_title   = 'لوحة الإدارة'
admin.site.index_title  = 'مرحباً بك في لوحة التحكم الإدارية'


@admin.register(User)
class CustomUserAdmin(UserAdmin):
    list_display  = ('username', 'get_full_name', 'email', 'role', 'is_active', 'date_joined')
    list_filter   = ('role', 'is_active', 'is_staff')
    search_fields = ('username', 'first_name', 'last_name', 'email')
    ordering      = ('-date_joined',)
    fieldsets     = UserAdmin.fieldsets + (
        ('الدور في المدرسة', {'fields': ('role',)}),
    )


@admin.register(TeacherProfile)
class TeacherProfileAdmin(admin.ModelAdmin):
    list_display  = ('user', 'department', 'specialization', 'is_approved')
    list_filter   = ('is_approved', 'department')
    search_fields = ('user__username', 'user__first_name', 'department')
    list_editable = ('is_approved',)
    actions       = ['approve_teachers', 'reject_teachers']

    def approve_teachers(self, request, queryset):
        updated = queryset.update(is_approved=True)
        self.message_user(request, f'تم اعتماد {updated} معلم/معلمة بنجاح ')
    approve_teachers.short_description = ' اعتماد المعلمين المحددين'

    def reject_teachers(self, request, queryset):
        updated = queryset.update(is_approved=False)
        self.message_user(request, f'تم إلغاء اعتماد {updated} معلم/معلمة')
    reject_teachers.short_description = '❌ إلغاء اعتماد المعلمين المحددين'


@admin.register(StudentProfile)
class StudentProfileAdmin(admin.ModelAdmin):
    list_display  = ('user', 'seat_number', 'class_level', 'is_approved')
    list_filter   = ('is_approved', 'class_level')
    search_fields = ('user__username', 'user__first_name', 'seat_number')
    list_editable = ('is_approved',)
    actions       = ['approve_students']

    def approve_students(self, request, queryset):
        updated = queryset.update(is_approved=True)
        self.message_user(request, f'تم اعتماد {updated} طالب/طالبة للعرض في الصفحة الرئيسية ✅')
    approve_students.short_description = '✅ اعتماد الطلاب للعرض في الرئيسية'


@admin.register(Rating)
class RatingAdmin(admin.ModelAdmin):
    list_display  = ('student', 'teacher', 'clarity_score', 'practical_score', 'professionalism_score', 'is_approved', 'created_at')
    list_filter   = ('is_approved', 'created_at')
    search_fields = ('student__user__username', 'teacher__user__username')
    list_editable = ('is_approved',)
    readonly_fields = ('created_at',)
    actions       = ['approve_ratings']

    def approve_ratings(self, request, queryset):
        updated = queryset.update(is_approved=True)
        self.message_user(request, f'تم اعتماد {updated} تقييم ونشره ✅')
    approve_ratings.short_description = '✅ اعتماد ونشر التقييمات المحددة'


@admin.register(SubjectResult)
class SubjectResultAdmin(admin.ModelAdmin):
    list_display  = ('student', 'subject_name', 'exam_period', 'academic_year', 'student_score', 'max_score', 'status')
    list_filter   = ('exam_period', 'academic_year', 'status')
    search_fields = ('student__user__username', 'student__seat_number', 'subject_name')
    list_editable = ('student_score', 'status')


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display  = ('name', 'price', 'stock_quantity', 'is_active')
    list_filter   = ('is_active',)
    list_editable = ('is_active',)


@admin.register(Reservation)
class ReservationAdmin(admin.ModelAdmin):
    list_display = ('user', 'product', 'quantity', 'status', 'pickup_date')
    list_filter  = ('status',)


@admin.register(WikiPost)
class WikiPostAdmin(admin.ModelAdmin):
    list_display  = ('title', 'author', 'category', 'is_published', 'views_count', 'created_at')
    list_filter   = ('is_published', 'category', 'created_at')
    search_fields = ('title', 'content', 'author__user__username')
    list_editable = ('is_published',)
    prepopulated_fields = {'slug': ('title',)}
    readonly_fields = ('views_count', 'created_at', 'updated_at')
    actions = ['publish_posts', 'unpublish_posts']

    def publish_posts(self, request, queryset):
        updated = queryset.update(is_published=True)
        self.message_user(request, f'تم نشر {updated} مقال ✅')
    publish_posts.short_description = '✅ نشر المقالات المحددة'

    def unpublish_posts(self, request, queryset):
        updated = queryset.update(is_published=False)
        self.message_user(request, f'تم إلغاء نشر {updated} مقال')
    unpublish_posts.short_description = '❌ إلغاء نشر المقالات المحددة'



@admin.register(BlogEntry)
class BlogEntryAdmin(admin.ModelAdmin):
    list_display = ('author', 'created_at')


class LessonInline(admin.TabularInline):
    model = Lesson
    extra = 1
    fields = ('order', 'title', 'description', 'video_url', 'video_file', 'image')


@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    list_display  = ('title', 'teacher', 'level', 'is_published', 'lessons_count', 'created_at')
    list_filter   = ('is_published', 'level')
    search_fields = ('title', 'teacher__user__username')
    list_editable = ('is_published',)
    inlines       = [LessonInline]
    readonly_fields = ('created_at', 'updated_at')
    actions = ['publish_courses', 'unpublish_courses']

    def lessons_count(self, obj):
        return obj.lessons.count()
    lessons_count.short_description = 'عدد الدروس'

    def publish_courses(self, request, queryset):
        updated = queryset.update(is_published=True)
        self.message_user(request, f'تم نشر {updated} كورس ✅')
    publish_courses.short_description = '✅ نشر الكورسات المحددة'

    def unpublish_courses(self, request, queryset):
        updated = queryset.update(is_published=False)
        self.message_user(request, f'تم إلغاء نشر {updated} كورس')
    unpublish_courses.short_description = '❌ إلغاء نشر الكورسات المحددة'


@admin.register(Lesson)
class LessonAdmin(admin.ModelAdmin):
    list_display  = ('title', 'course', 'order', 'has_video', 'has_image', 'has_text', 'created_at')
    list_filter   = ('course__is_published',)
    search_fields = ('title', 'course__title')
    readonly_fields = ('created_at',)

    def has_video(self, obj): return obj.has_video
    has_video.boolean = True
    has_video.short_description = 'فيديو'

    def has_image(self, obj): return obj.has_image
    has_image.boolean = True
    has_image.short_description = 'صورة'

    def has_text(self, obj): return obj.has_text
    has_text.boolean = True
    has_text.short_description = 'نص'
@admin.register(Enrollment)
class EnrollmentAdmin(admin.ModelAdmin):
    list_display = ('student', 'course', 'status', 'display_screenshot', 'enrolled_at')
    list_filter  = ('status', 'enrolled_at')
    search_fields = ('student__user__username', 'course__title')
    list_editable = ('status',)
    readonly_fields = ('display_screenshot_large', 'enrolled_at')
    actions = ['activate_enrollments']

    def display_screenshot(self, obj):
        if obj.payment_screenshot:
            from django.utils.html import format_html
            return format_html('<img src="{}" style="width: 50px; height: 50px; border-radius: 5px; object-fit: cover;" />', obj.payment_screenshot.url)
        return "لا يوجد إيصال"
    display_screenshot.short_description = 'معاينة الإيصال'

    def display_screenshot_large(self, obj):
        if obj.payment_screenshot:
            from django.utils.html import format_html
            return format_html('<a href="{0}" target="_blank"><img src="{0}" style="max-width: 400px; border-radius: 10px; shadow: 0 4px 6px rgba(0,0,0,0.1);" /></a>', obj.payment_screenshot.url)
        return "لا يوجد إيصال مرفوع"
    display_screenshot_large.short_description = 'صورة الإيصال كاملة'

    def activate_enrollments(self, request, queryset):
        updated = queryset.update(status='active')
        self.message_user(request, f'تم تفعيل {updated} اشتراك بنجاح ✅')
    activate_enrollments.short_description = '✅ تفعيل الاشتراكات المحددة'

@admin.register(LessonCompletion)
class LessonCompletionAdmin(admin.ModelAdmin):
    list_display = ('student', 'lesson', 'course_name', 'completed_at')
    list_filter = ('completed_at', 'lesson__course')
    search_fields = ('student__user__username', 'lesson__title')
    
    def course_name(self, obj):
        return obj.lesson.course.title
    course_name.short_description = 'الكورس'

@admin.register(PDFSummary)
class PDFSummaryAdmin(admin.ModelAdmin):
    list_display = ('title', 'level', 'price', 'is_active', 'created_at')
    list_filter = ('level', 'is_active')
    search_fields = ('title', 'description')
    list_editable = ('is_active', 'price')

@admin.register(SummaryPurchase)
class SummaryPurchaseAdmin(admin.ModelAdmin):
    list_display = ('student', 'summary', 'status', 'display_screenshot', 'purchased_at')
    list_filter = ('status', 'purchased_at', 'summary')
    search_fields = ('student__user__username', 'summary__title')
    list_editable = ('status',)
    readonly_fields = ('display_screenshot_large', 'purchased_at')
    actions = ['activate_purchases']

    def display_screenshot(self, obj):
        if obj.payment_screenshot:
            from django.utils.html import format_html
            return format_html('<img src="{}" style="width: 50px; height: 50px; border-radius: 5px; object-fit: cover;" />', obj.payment_screenshot.url)
        return "لا يوجد إيصال"
    display_screenshot.short_description = 'معاينة الإيصال'

    def display_screenshot_large(self, obj):
        if obj.payment_screenshot:
            from django.utils.html import format_html
            return format_html('<a href="{0}" target="_blank"><img src="{0}" style="max-width: 400px; border-radius: 10px; shadow: 0 4px 6px rgba(0,0,0,0.1);" /></a>', obj.payment_screenshot.url)
        return "لا يوجد إيصال مرفوع"
    display_screenshot_large.short_description = 'صورة الإيصال كاملة'

    def activate_purchases(self, request, queryset):
        updated = queryset.update(status='active')
        self.message_user(request, f'تم تفعيل {updated} عملية شراء بنجاح ✅')
    activate_purchases.short_description = '✅ تفعيل عمليات الشراء المحددة'
