from django import forms

from core.validators import validate_future_date
from .models import GENDER, Doctor, Technician


class DoctorCreateForm(forms.Form):
    status = forms.ChoiceField(choices=Doctor.STATUS_CHOICES, required=False, widget=forms.Select(attrs={
        'class': 'form-control',
    }))
    first_name = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'First name'
        })
    )
    last_name = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Last name'
        })
    )
    phone_number = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Contact number'
        })
    )
    date_of_birth = forms.DateField(
        widget=forms.DateInput(attrs={
            'class': 'form-control',
            'placeholder': '12 May 2016',
            'type': 'date'
        }),
        validators=[validate_future_date]
    )
    specialty = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Specialty'
        })
    )
    gender = forms.ChoiceField(
        choices=GENDER,
        widget=forms.Select(attrs={
            'class': 'form-select'
        })
    )
    address = forms.CharField(
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'rows': 3,
            'placeholder': 'Write your residential address'
        }),
    )
    profile_picture = forms.FileField(
        required=False,
        widget=forms.FileInput(attrs={
            'class': 'd-none',
            'accept': 'image/*'
        })
    )
    identifier = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'identifier',
            'type': 'number'
        })
    )

    biography = forms.CharField(
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'rows': 6,
            'placeholder': 'Write your biography'
        }),
    )

    def clean_phone_number(self):
        phone_number = self.cleaned_data.get('phone_number')

        if not phone_number.isdigit():
            raise forms.ValidationError("Please enter a valid phone number containing only digits.")

        if len(phone_number) < 10 or len(phone_number) > 15:
            raise forms.ValidationError("Phone number must be between 10 and 15 digits.")

        return phone_number


class TechnicianCreateForm(forms.Form):
    status = forms.ChoiceField(choices=Technician.STATUS_CHOICES, required=False, widget=forms.Select(attrs={
        'class': 'form-control',
    }))
    first_name = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'First name'
        })
    )
    last_name = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Last name'
        })
    )
    phone_number = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Contact number'
        })
    )
    date_of_birth = forms.DateField(
        widget=forms.DateInput(attrs={
            'class': 'form-control',
            'placeholder': '12 May 2016',
            'type': 'date'
        }),
        validators=[validate_future_date]
    )
    specialty = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Specialty'
        })
    )
    gender = forms.ChoiceField(
        choices=GENDER,
        widget=forms.Select(attrs={
            'class': 'form-select'
        })
    )
    address = forms.CharField(
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'rows': 3,
            'placeholder': 'Write your residential address'
        })
    )
    profile_picture = forms.FileField(
        required=False,
        widget=forms.FileInput(attrs={
            'class': 'd-none',
            'accept': 'image/*'
        })
    )
    identifier = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'identifier',
            'type': 'number'
        })
    )

    biography = forms.CharField(
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'rows': 6,
            'placeholder': 'Write your biography'
        }),
    )

    def clean_phone_number(self):
        phone_number = self.cleaned_data.get('phone_number')

        if not phone_number.isdigit():
            raise forms.ValidationError("Please enter a valid phone number containing only digits.")

        if len(phone_number) < 10 or len(phone_number) > 15:
            raise forms.ValidationError("Phone number must be between 10 and 15 digits.")

        return phone_number