from django.contrib import admin

from childmonitoring.models import (
    SunChild, Region, Site, School, DayHospital, Outpatient, Case, Leisure, IdentifiedAllergy, IdentifiedPathology,
    BaseMedicalHistory, SurgicalMedicalHistory, FamilyMedicalHistory, MedicalHistory, Speciality, SpecialistReport,
    Events, AppointmentStatus, Appointment, 
    # ZAM
    ZamSite, Patology, Service, TeamMember, PatientToFollow, GeneralReport,
)


class RegionAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')


class SiteAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')

class DayHospitalAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'created_by', 'updated_date', 'updated_by')


class OutpatientAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'created_by', 'updated_date', 'updated_by')


class CaseAdmin(admin.ModelAdmin):
    list_display = ('name', 'description', 'created_by', 'created_date', 'updated_by', 'updated_date')


class SchoolAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')


class LeisureAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')


class SurgicalMedicalHistoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')


class FamilyMedicalHistoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_date', 'updated_date')


class SpecialityAdmin(admin.ModelAdmin):
    list_display = ('name', 'description', 'created_date', 'updated_date', 'created_by', 'updated_by')
    search_fields = ('name', 'description', 'created_by', 'updated_by')
    list_filter = ('created_date', 'updated_date')


class SunChildAdmin(admin.ModelAdmin):
    list_display = (
        'first_name', 'last_name', 'address', 'birth_date', 'phone_number',
        'father_full_name', 'mother_full_name', 'comment', 'region',
        'get_cases', 'day_hospital', 'outpatient', 'school',
        'get_leisure', 'created_date', 'updated_date', 'created_by', 'updated_by',
        )
    list_filter = ('created_date', 'updated_date')


class SpecialistReportAdmin(admin.ModelAdmin):
    list_display = ('name', 'sun_child', 'made_by', 'speciality', 'created_date', 'updated_date', 'created_by', 'updated_by')
    search_fields = ('name', 'sun_child__name', 'made_by__username', 'speciality__name', 'created_by', 'updated_by')
    list_filter = ('created_date', 'updated_date', 'speciality')


class EventsAdmin(admin.ModelAdmin):
    list_display = ('name', 'start', 'end')


class AppointmentStatusAdmin(admin.ModelAdmin):
    list_display = ('status', 'created_by', 'created_date', 'updated_by', 'updated_date')


class AppointmentAdmin(admin.ModelAdmin):
    list_display = ('name', 'specialist', 'sun_child', 'region', 'site', 'status', 'start', 'end')


# For ZAM Project
# Sites
class ZamSiteAdmin(admin.ModelAdmin):
    list_display = ('name', 'comment',)
    list_filter = ('created_date', 'updated_date')
    search_fields = ('name',)


# Patologies
class PatologyAdmin(admin.ModelAdmin):
    list_display = ('name', 'comment',)
    list_filter = ('created_date', 'updated_date')
    # search_fields = ('name',)


# Register your models with the custom admin site
class ServiceAdmin(admin.ModelAdmin):
    list_display = (
        'name', 'comment', 'created_date', 'created_by',
        'updated_date', 'updated_by'
    )


class TeamMemberAdmin(admin.ModelAdmin):
    list_display = (
        'first_name', 'last_name', 'get_services', 'consultation_date', 'phone_number',
        'manager_phone_number', 'personal_email', 'manager_email',
        'created_date', 'created_by', 'updated_date', 'updated_by'
    )

    def get_services(self, obj):
        return ", ".join([service.name for service in obj.service.all()])
    get_services.short_description = 'Services'


class PatientToFollowAdmin(admin.ModelAdmin):
    list_display = (
        'first_name', 'last_name', 'age', 'gender', 'phone_number', 'address', 'diagnosis', 'recommendations',
        'consultation_date', 'created_date', 'created_by', 'updated_date', 'updated_by',
    )


class GeneralReportAdmin(admin.ModelAdmin):
    list_display = (
        'date',
        'age_min', 
        'age_max',
        'display_sites',
        'number_of_patients_consulted', 
        'number_of_women', 
        'number_of_men', 
        'created_date', 
        'created_by', 
        'updated_date', 
        'updated_by',
    )
    search_fields = ('date',)
    list_filter = ('created_date', 'updated_date')

    def get_patients_a_suivre(self, obj):
        return ", ".join([patient.first_name for patient in obj.patient_a_suivre.all()])
    get_patients_a_suivre.short_description = 'Patients à Suivre'

    def display_sites(self, obj):
        # Return a comma-separated string of related `site` names
        return ", ".join([sites.name for sites in obj.site.all()])
    display_sites.short_description = 'Sites'  # Optional: Display name in admin


# For Zam Project
admin.site.register(ZamSite, ZamSiteAdmin)
admin.site.register(Patology, PatologyAdmin)
admin.site.register(Service, ServiceAdmin)
admin.site.register(TeamMember, TeamMemberAdmin)
admin.site.register(PatientToFollow, PatientToFollowAdmin)
admin.site.register(GeneralReport, GeneralReportAdmin)

# admin.site.register(SunChild)
# admin.site.register(SunChild, SunChildAdmin)
# admin.site.register(Region, RegionAdmin)
# admin.site.register(Site, SiteAdmin)
# admin.site.register(Case, CaseAdmin)
# admin.site.register(DayHospital, DayHospitalAdmin)
# admin.site.register(Outpatient, OutpatientAdmin)
# admin.site.register(School, SchoolAdmin)
# admin.site.register(Leisure, LeisureAdmin)
# admin.site.register(IdentifiedAllergy)
# admin.site.register(IdentifiedPathology)
# admin.site.register(BaseMedicalHistory)
# admin.site.register(SurgicalMedicalHistory, SurgicalMedicalHistoryAdmin)
# admin.site.register(FamilyMedicalHistory, FamilyMedicalHistoryAdmin)
# admin.site.register(MedicalHistory)
# admin.site.register(Speciality, SpecialityAdmin)
# admin.site.register(SpecialistReport, SpecialistReportAdmin)
# admin.site.register(Events, EventsAdmin)
# admin.site.register(AppointmentStatus, AppointmentStatusAdmin)
# admin.site.register(Appointment, AppointmentAdmin)
