from django.contrib import admin
from django import forms
from .models import Group, Subject, Room, ScheduleItem, Attendance, AcademicDebt, Olympiad, Department, \
    EducationalMaterial

# ==================== НАСТРОЙКИ АДМИНКИ ====================
admin.site.site_header = "Панель управления"
admin.site.site_title = "Панель управления"
admin.site.index_title = "Панель управления"


# ==================== УЧЕБНЫЕ МОДУЛИ ====================

@admin.register(Group)
class GroupAdmin(admin.ModelAdmin):
    list_display = ('name', 'course_num', 'academic_year', 'study_form', 'budget_form', 'curator')
    list_filter = ('course_num', 'study_form', 'budget_form', 'academic_year')
    search_fields = ('name', 'speciality_code', 'speciality_name')
    raw_id_fields = ('curator',)

    fieldsets = (
        ('Основная информация', {
            'fields': ('name', 'course_num', 'academic_year')
        }),
        ('Формы обучения', {
            'fields': ('study_form', 'budget_form')
        }),
        ('Специальность', {
            'fields': ('speciality_code', 'speciality_name')
        }),
        ('Куратор', {
            'fields': ('curator',)
        }),
    )

    def has_add_permission(self, request):
        # На главной странице — НЕТ кнопки "Добавить"
        if request.path == '/admin/':
            return False
        # Внутри раздела — ЕСТЬ кнопка "Добавить"
        return True


@admin.register(Subject)
class SubjectAdmin(admin.ModelAdmin):
    list_display = ('code', 'name', 'short_name')
    search_fields = ('code', 'name')

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True


@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
    list_display = ('number', 'name', 'room_type', 'capacity', 'is_distance')
    list_filter = ('room_type', 'is_distance')
    search_fields = ('number', 'name')

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True


# Скрываем расписание и посещаемость из админки
# @admin.register(ScheduleItem)
# class ScheduleItemAdmin(admin.ModelAdmin):
#     pass

# @admin.register(Attendance)
# class AttendanceAdmin(admin.ModelAdmin):
#     pass


@admin.register(AcademicDebt)
class AcademicDebtAdmin(admin.ModelAdmin):
    list_display = ('student', 'subject', 'debt_type', 'assigned_date', 'is_resolved')
    list_filter = ('is_resolved', 'debt_type')
    search_fields = ('student__last_name', 'subject__name')
    raw_id_fields = ('student', 'subject')
    readonly_fields = ('assigned_date',)  # Добавляем как только для чтения

    fieldsets = (
        ('Информация о задолженности', {
            'fields': ('student', 'subject', 'debt_type', 'due_date', 'is_resolved', 'resolved_date')
            # assigned_date убрали из fieldsets
        }),
    )

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True


@admin.register(Olympiad)
class OlympiadAdmin(admin.ModelAdmin):
    list_display = ('student', 'name', 'level', 'result', 'year')
    list_filter = ('level', 'result', 'year')
    search_fields = ('student__last_name', 'name')
    raw_id_fields = ('student',)

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True


# ==================== КАФЕДРА ====================

@admin.register(Department)
class DepartmentAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'head', 'deputy')
    search_fields = ('name', 'code')

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True


# ==================== УЧЕБНЫЕ МАТЕРИАЛЫ (CMS) ====================

class EducationalMaterialForm(forms.ModelForm):
    class Meta:
        model = EducationalMaterial
        fields = '__all__'
        widgets = {
            'groups': forms.CheckboxSelectMultiple(),
            'author': forms.Select(),
        }


@admin.register(EducationalMaterial)
class EducationalMaterialAdmin(admin.ModelAdmin):
    form = EducationalMaterialForm
    list_display = ('title', 'material_type', 'author', 'is_published', 'created_at')
    list_filter = ('material_type', 'is_published', 'groups')
    search_fields = ('title', 'content')

    fieldsets = (
        ('Основная информация', {
            'fields': ('title', 'content', 'material_type', 'is_published')
        }),
        ('Автор и доступ', {
            'fields': ('author', 'groups')
        }),
        ('Материалы', {
            'fields': ('file', 'link')
        }),
    )

    def has_add_permission(self, request):
        if request.path == '/admin/':
            return False
        return True