from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import *
from .forms import RoleAdminForm 
# Register your models here.
# admin.py
class RoleAdmin(admin.ModelAdmin):
    form = RoleAdminForm
    list_display = ['name']
    # inlines = [RoleModuleAccessInline]
    class Media:
        css = {
            'all': ('admin/css/custom_module_checkbox.css',)
        }
    

class ModuleAdmin(admin.ModelAdmin):
    list_display = ['name']
    search_fields = ['name']
    
admin.site.register(Module, ModuleAdmin)
admin.site.register(Role, RoleAdmin)

class CustomUserAdmin(UserAdmin):
    list_display = ('email', 'role','battalion','company','army_no','is_staff', 'is_superuser')
    list_filter = ('role','is_staff', 'is_superuser')
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('name','role','battalion','company','rank','army_no','mobile_no','picture','is_staff', 'is_superuser')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2','name', 'role','is_staff', 'is_superuser'),
        }),
    )
    search_fields = ('email',)
    ordering = ('email',)
admin.site.register(CustomUser, CustomUserAdmin)

@admin.register(MemberType)
class MemberTypeAdmin(admin.ModelAdmin):
    pass
@admin.register(MemberStatus)
class MemberStatusAdmin(admin.ModelAdmin):
    pass

@admin.register(Rank)
class RankAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'get_member_type', 'get_member_status')
    def get_member_type(self, obj):
        return obj.memberType.showName if obj.memberType else 'N/A'
    get_member_type.short_description = 'Member Type'

    def get_member_status(self, obj):
        return obj.member_status.name if obj.member_status else 'N/A'
    get_member_status.short_description = 'Member Status'

@admin.register(Apartment)
class ApartmentAdmin(admin.ModelAdmin):
    pass





@admin.register(Battalion)
class BattalionAdmin(admin.ModelAdmin):
    list_display = ('sn','name')

@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
    list_display = ( 'name', 'battalion')

    
@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    list_display = ('user', 'company','get_battalion', 'army_no', 'rank', 'member_type', 'get_member_status')
    search_fields = ('army_no',)
    list_filter = ('company', 'company__battalion', 'rank', 'member_type', 'rank__member_status')

    def get_battalion(self, obj):
        return obj.company.battalion.name if obj.company.battalion else 'N/A'
    get_battalion.short_description = 'Battalion'
    def get_member_status(self, obj):
        return obj.rank.member_status.name if obj.rank.member_status else 'N/A'
    get_member_status.short_description = 'Member Status'
    
    
@admin.register(CompanyTakeAttendance)
class CompanyTakeAttendanceAdmin(admin.ModelAdmin):
    pass

@admin.register(AttendanceMember)
class AttendanceMemberAdmin(admin.ModelAdmin):
    pass

@admin.register(LeaveType)
class LeaveTypeAdmin(admin.ModelAdmin):
    pass
@admin.register(Leave)
class LeaveApplicationAdmin(admin.ModelAdmin):
    list_display = ('get_army_no', 'leave_type','date','start_date','end_date')
    search_fields = ('member__army_no',)

    def get_army_no(self, obj):
        return obj.member.army_no
    get_army_no.short_description = 'Army No'


@admin.register(AttendanceSummary)
class AttendanceSummaryAdmin(admin.ModelAdmin):
    pass
@admin.register(AttendanceSummaryOffr)
class AttendanceSummaryOffrAdmin(admin.ModelAdmin):
    pass

@admin.register(AttendanceSummaryCart)
class AttendanceSummaryCartAdmin(admin.ModelAdmin):
    list_display = ('battalion', 'date', 'battalion_approved', 'adjutant_approved', 'dq_approved')
    actions = ['mark_all_approved']

    @admin.action(description="Mark selected as All Approved (Battalion, Adjutant, DQ)")
    def mark_all_approved(self, request, queryset):
        updated = queryset.update(
            battalion_approved=True,
            adjutant_approved=True,
            dq_approved=True
        )
        self.message_user(request, f"{updated} record(s) marked as fully approved.")


@admin.register(ApplyLeave)
class ApplyLeaveAdmin(admin.ModelAdmin):
    pass

@admin.register(MovementOrder)
class MovementOrderAdmin(admin.ModelAdmin):
    pass

@admin.register(MainLeave)
class MainLeaveAdmin(admin.ModelAdmin):
    list_display = ('get_army_no', 'leave_type')
    search_fields = ('member__army_no',)

    def get_army_no(self, obj):
        return obj.member.army_no
    get_army_no.short_description = 'Army No'
    
@admin.register(Course_Cdr_Trg)
class Course_Cdr_TrgAdmin(admin.ModelAdmin):
    list_display = ('get_army_no', 'leave_type')
    search_fields = ('member__army_no',)

    def get_army_no(self, obj):
        return obj.member.army_no
    get_army_no.short_description = 'Army No'

@admin.register(OutOfUnitEmp)
class outOfUnitEmpAdmin(admin.ModelAdmin):
    pass
@admin.register(UnauthAbsent)
class UnauthAbsentAdmin(admin.ModelAdmin):
    list_display = ('get_army_no', 'leave_type')
    search_fields = ('member__army_no',)

    def get_army_no(self, obj):
        return obj.member.army_no
    get_army_no.short_description = 'Army No'
@admin.register(OtherReason)
class OtherReasonAdmin(admin.ModelAdmin):
    list_display = ('get_army_no', 'leave_type')
    search_fields = ('member__army_no',)

    def get_army_no(self, obj):
        return obj.member.army_no
    get_army_no.short_description = 'Army No'

@admin.register(OpsDepl)
class OpsDeplAdmin(admin.ModelAdmin):
    pass 

@admin.register(BasicInformation)
class BasicInformationAdmin(admin.ModelAdmin):
    pass

@admin.register(ServiceInformation)
class ServiceInformationAdmin(admin.ModelAdmin):
    pass
@admin.register(FamilyInformation)
class FamilyInformationAdmin(admin.ModelAdmin):
    pass
@admin.register(ExPerf)
class ExPerfAdmin(admin.ModelAdmin):
    pass
@admin.register(GRFiring)
class GRFiringAdmin(admin.ModelAdmin):
    pass
@admin.register(EreTypeTwo)
class EreTypeTwoAdmin(admin.ModelAdmin):
    pass 
@admin.register(APR)
class APRAdmin(admin.ModelAdmin):
    pass 

@admin.register(Notice)
class NoticeAdmin(admin.ModelAdmin):
    list_display = ('date', 'notice_from', 'notice_for')
