import re
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _


class RegisterForm(UserCreationForm):
    username = forms.CharField(
        max_length=7,
        label=_("Username"),
        help_text=_("Enter your TUKE login (ab123cd)"),
    )
    first_name = forms.CharField(label=_("First name"), max_length=30, required=True)
    last_name = forms.CharField(label=_("Last name"), max_length=30, required=True)
    email = forms.EmailField(
        max_length=254,
        label=_("Email"),
        help_text=_("Enter your TUKE valid email address (name.surname@student.tuke.sk)"),
    )

    def clean_username(self):
        username = self.cleaned_data["username"]
        pattern = r"^[a-z]{2}\d{3}[a-z]{2}$"
        if not re.match(pattern, username):
            raise forms.ValidationError(_("Invalid username format."))
        return username

    def clean_email(self):
        return self.cleaned_data["email"]

    class Meta:
        model = User
        fields = [
            "username",
            "first_name",
            "last_name",
            "email",
            "password1",
            "password2",
        ]
        labels = {
            "password1": _("Password"),
            "password2": _("Password confirmation"),
        }


class UserUpdateForm(forms.ModelForm):
    username = forms.CharField(
        max_length=7,
        label=_("Username"),
        help_text=_("Enter your TUKE login (ab123cd)"),
    )
    first_name = forms.CharField(label=_("First name"), max_length=30, required=True)
    last_name = forms.CharField(label=_("Last name"), max_length=30, required=True)

    class Meta:
        model = User
        fields = ["username", "first_name", "last_name"]
