from django.contrib import admin
from .models import Person, Professor, PhDStudent, MasterStudent
from traduction.admin_mixins import TranslatableAdminMixin


class ProfessorInline(admin.StackedInline):
    model = Professor
    can_delete = False
    verbose_name = 'Details professeur'


class PhDStudentInline(admin.StackedInline):
    model = PhDStudent
    can_delete = False
    verbose_name = 'Details doctorant'
    fk_name = 'person'


class MasterStudentInline(admin.StackedInline):
    model = MasterStudent
    can_delete = False
    verbose_name = 'Details etudiant master'


@admin.register(Person)
class PersonAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['full_name', 'person_type', 'country', 'university', 'email', 'is_featured', 'is_active']
    list_filter = ['person_type', 'country', 'university', 'is_featured', 'is_active', 'is_director', 'is_coordinator']
    search_fields = ['first_name', 'last_name', 'email', 'country__name']
    prepopulated_fields = {'slug': ('first_name', 'last_name')}
    list_editable = ['is_featured', 'is_active']
    autocomplete_fields = ['country', 'university']

    fieldsets = (
        ('Identite', {
            'fields': ('first_name', 'last_name', 'slug', 'photo', 'person_type')
        }),
        ('Contact', {
            'fields': ('email', 'phone', 'university')
        }),
        ('Origine', {
            'fields': ('country',)
        }),
        ('Profil', {
            'fields': ('bio', 'research_interests')
        }),
        ('Liens', {
            'fields': ('website', 'linkedin_url', 'github_url', 'google_scholar_url', 'orcid'),
            'classes': ('collapse',)
        }),
        ('Roles et statut', {
            'fields': ('is_director', 'is_coordinator', 'is_featured', 'is_active', 'order')
        }),
    )

    def get_inlines(self, request, obj=None):
        if obj:
            if obj.person_type == 'professor':
                return [ProfessorInline]
            elif obj.person_type == 'phd':
                return [PhDStudentInline]
            elif obj.person_type == 'master':
                return [MasterStudentInline]
        return []


@admin.register(Professor)
class ProfessorAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['person', 'title', 'position', 'department']
    list_filter = ['title']
    search_fields = ['person__first_name', 'person__last_name', 'position', 'specialization']
    raw_id_fields = ['person']


@admin.register(PhDStudent)
class PhDStudentAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['person', 'thesis_title', 'supervisor', 'start_date', 'expected_end_date']
    list_filter = ['start_date', 'funding_source']
    search_fields = ['person__first_name', 'person__last_name', 'thesis_title']
    raw_id_fields = ['person', 'supervisor', 'co_supervisor']
    date_hierarchy = 'start_date'


@admin.register(MasterStudent)
class MasterStudentAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['person', 'cohort_year', 'specialization', 'current_semester', 'has_scholarship', 'is_alumni']
    list_filter = ['cohort_year', 'specialization', 'has_scholarship', 'is_alumni', 'current_semester']
    search_fields = ['person__first_name', 'person__last_name', 'thesis_title']
    raw_id_fields = ['person', 'advisor', 'semester1_university', 'semester2_university']
