# forms.py - فرم‌های مورد نیاز برای کار با مدل‌ها

from django import forms
from .models import Patient, PatientImage, MedicalRecord
from reservation.models import Reservation
from django.utils import timezone


class PatientForm(forms.ModelForm):
    class Meta:
        model = Patient
        fields = ['first_name', 'last_name', 'phone_number', 'age',
                  'gender', 'address', 'profile_picture', 'medical_history', 'biography']
        widgets = {
            'medical_history': forms.Textarea(attrs={'rows': 4}),
            'biography': forms.Textarea(attrs={'rows': 3}),
        }


class PatientImageForm(forms.ModelForm):
    class Meta:
        model = PatientImage
        fields = ['image', 'description', 'image_type']
        widgets = {
            'description': forms.TextInput(attrs={'placeholder': 'توضیح مختصر تصویر'}),
        }


class MedicalRecordForm(forms.ModelForm):
    class Meta:
        model = MedicalRecord
        fields = ['record_type', 'diagnosis_date', 'medications', 'description',
                  'status', 'diabetes_type', 'blood_pressure', 'pregnancy_week']
        widgets = {
            'diagnosis_date': forms.DateInput(attrs={'type': 'date'}),
            'medications': forms.Textarea(attrs={'rows': 3}),
            'description': forms.Textarea(attrs={'rows': 4}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['diabetes_type'].required = False
        self.fields['blood_pressure'].required = False
        self.fields['pregnancy_week'].required = False

        # در صورت ویرایش رکورد موجود، فیلدهای ضروری را بر اساس نوع رکورد فعال کنیم
        if self.instance.pk:
            if self.instance.record_type == 'diabetes':
                self.fields['diabetes_type'].required = True
            elif self.instance.record_type == 'hypertension':
                self.fields['blood_pressure'].required = True
            elif self.instance.record_type == 'pregnancy':
                self.fields['pregnancy_week'].required = True


class ReservationForm(forms.ModelForm):
    class Meta:
        model = Reservation
        fields = ['patient', 'service', 'doctor', 'technician', 'reservation_date', 'notes', 'status']
        widgets = {
            'reservation_date': forms.DateTimeInput(attrs={'type': 'datetime-local'}),
            'notes': forms.Textarea(attrs={'rows': 3}),
        }

    def __init__(self, *args, **kwargs):
        # اگر بیمار از قبل مشخص باشد
        patient = kwargs.pop('patient', None)
        super().__init__(*args, **kwargs)

        if patient:
            self.fields['patient'].initial = patient
            self.fields['patient'].widget = forms.HiddenInput()

        # تنظیم حداقل زمان نوبت به زمان فعلی
        now = timezone.now()
        self.fields['reservation_date'].widget.attrs['min'] = now.strftime('%Y-%m-%dT%H:%M')

    def clean_reservation_date(self):
        reservation_date = self.cleaned_data.get('reservation_date')
        doctor = self.cleaned_data.get('doctor')

        if reservation_date and doctor:
            # بررسی تداخل زمانی با سایر نوبت‌ها
            if not Reservation.is_slot_available(doctor, reservation_date):
                raise forms.ValidationError("این زمان برای پزشک انتخاب شده در دسترس نیست.")

        return reservation_date



















