from django import forms
from django.contrib import admin
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.core.exceptions import ValidationError
import csv
from django.http import HttpResponse
from django.contrib import admin
from .models import *
from django.utils.html import format_html
from .forms import DoctorForm, AppointmentForm

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.http import HttpResponse
import csv

from .models import MyUser


def export_users_csv(modeladmin, request, queryset):
    response = HttpResponse(
        content_type='text/csv; charset=utf-8-sig'
    )
    response['Content-Disposition'] = 'attachment; filename="users.csv"'

    writer = csv.writer(response)

    writer.writerow([
        'ID',
        'Mobile',
        'Name',
        'Date of Birth',
        'Gender',
        'Role',
        'Address',
        'Is Active',
        'Is Staff',
        'Is Superuser',
        'Last Login',
    ])

    for user in queryset:
        writer.writerow([
            user.id,
            user.mobile,
            user.name,
            user.dob,
            user.gender,
            user.role,
            user.address,
            user.is_active,
            user.is_staff,
            user.is_superuser,
            user.last_login,
        ])

    return response


export_users_csv.short_description = "Export selected users as CSV"


@admin.register(MyUser)
class CustomUserAdmin(UserAdmin):
    model = MyUser

    list_display = (
        'id',
        'mobile',
        'name',
        'role',
        'is_superuser',
    )

    search_fields = (
        'mobile',
        'name',
    )

    ordering = ('mobile',)

    fieldsets = (
        (None, {
            'fields': (
                'mobile',
                'password',
            )
        }),

        ('Personal info', {
            'fields': (
                'name',
                'dob',
                'gender',
                'role',
                'address',
                'profile_pic',
            )
        }),

        ('Permissions', {
            'fields': (
                'is_active',
                'is_staff',
                'is_superuser',
                'groups',
                'user_permissions',
            )
        }),

        ('Important dates', {
            'fields': (
                'last_login',
            )
        }),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': (
                'mobile',
                'name',
                'dob',
                'gender',
                'role',
                'password1',
                'password2',
            ),
        }),
    )

    actions = [
        export_users_csv,
    ]

# admin.site.register(MyUser, CustomUserAdmin)

@admin.register(Doctor)
class DoctorAdmin(admin.ModelAdmin):
    form = DoctorForm
    list_display = [
        'id',
        'vendor',
        'designation',
        'specialization',
        'status'
    ]

@admin.register(Availability)
class AvailabilityAdmin(admin.ModelAdmin):
    list_display = [
        'id',
        'doctor',
        'date',
        'start_time',
        'end_time',
        'end_serial_time',
        'max_serials',
    ]

@admin.register(Appointment)
class AppointmentAdmin(admin.ModelAdmin):
    form = AppointmentForm
    list_display = [
        'id',
        'doctor',
        'patient',
        'available',
        'notes',
        'serial',
        'created_at'
    ]
    autocomplete_fields = ['patient']
    
class MedicineInline(admin.TabularInline):
    model = PatientMedicine
    extra = 1
    verbose_name = "ঔষধ"
    verbose_name_plural = "ঔষধসমূহ"
    fields = ['name', 'time', 'meal_time', 'duration']
    show_change_link = True

@admin.register(Prescription)
class PrescriptionAdmin(admin.ModelAdmin):
    list_display = [
        'id',
        'appointment',
        'prescribed_date',
        'symptoms',
        'instructions',
        'weight',
    ]
    search_fields = ['appointment__patient__user__name']
    list_filter = ['prescribed_date']
    inlines = [MedicineInline]
    verbose_name = "প্রেসক্রিপশন"
    verbose_name_plural = "প্রেসক্রিপশনসমূহ"

@admin.register(Test)
class TestAdmin(admin.ModelAdmin):
    list_display = [
        'id',
        'appointment',
        'test_name',
        'prescribed_date',
        'status',
    ]
@admin.register(TestReport)
class TestReportAdmin(admin.ModelAdmin):
    list_display = [
        'id',
        'test',
        'uploaded_by',
        'report_file',
        'upload_date',
        'notes'
    ]

admin.site.register(HActiviti)
admin.site.register(PatientMedicine)


@admin.register(SiteSettings)
class SiteSettingsAdmin(admin.ModelAdmin):
    list_display = ['maintenance_mode']
    actions = ['enable_maintenance', 'disable_maintenance']

    def enable_maintenance(self, request, queryset):
        queryset.update(maintenance_mode=True)
    enable_maintenance.short_description = "Enable Maintenance Mode"

    def disable_maintenance(self, request, queryset):
        queryset.update(maintenance_mode=False)
    disable_maintenance.short_description = "Disable Maintenance Mode"
