from .models import CastomUser
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django import forms


from .validators import validate_pasword_len


class RegisterUserForm(forms.ModelForm):
    first_name = forms.CharField(
        label='Имя',
        validators=[RegexValidator('^[а-яА-Я- -]+$',
                                   message="Разрешены только кириллица, дефис и пробелы")],
        error_messages={'required': 'Обязательное поле', }
    )
    last_name = forms.CharField(
        label='Фамилия',
        validators=[RegexValidator('^[а-яА-Я- -]+$',
                                   message="Разрешены только кириллица, дефис и пробелы")],
        error_messages={'required': 'Обязательное поле', }
    )
    username = forms.CharField(label='Логин',
                                validators=[RegexValidator('^[a-zA-Z0-9-]+$',
                                                                message = "Разрешены только латиница, цифры или тире")],
                                error_messages={
                                        'required': 'Обязательное поле',
                                        'unique': 'Данный логин занят'
                                })
    email = forms.EmailField(label='Anpec злектронной почт',
                            error_messages={
                                'invalid': 'Hе правильный формат адреса',
                                'unique': 'Данный адрес занят'
                            })
    password = forms.CharField(label='Пароль',
                                widget=forms.PasswordInput,
                                validators=[validate_pasword_len],
                                error_messages={
                                    'required': 'Обязательное поле',
                                })
    password2 = forms.CharField(label='Пapоль (повторно)',
                                widget=forms.PasswordInput,
                                error_messages={
                                    'required': 'Обязательное поле',
                                })
    rules = forms.BooleanField(required=True,
                                label='Согласие с правилами регистрации',
                               error_messages={
                                   'required': 'Обязательное поле',
                               })
    def clean(self):
        super().clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        if password and password2 and password != password2:
            raise ValidationError({
                'password2': ValidationError('Введенные пароли не совпадант', соdе='password_mismatch')
        })
    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data.get('password'))
        if commit:
            user.save()
        return user
    class Meta:
        model = CastomUser
        fields = ('first_name', 'last_name', 'username', 'email', 'password', 'password2', 'rules')


class SearchForm(forms.Form):
    query = forms.CharField(max_length=255, required=False, label= 'Search')
