from wtforms import Form, StringField, PasswordField, validators, IntegerField, BooleanField


class RegisterForm(Form):
    name = StringField('Фамилия', [
        validators.Length(min=2, max=40, message='Имя должно быть от 2 до 40 символов')])
    username = StringField('Имя пользователя', [
        validators.Length(min=2, max=30, message='Имя пользователя должно быть от 2 до 30 символов')])
    email = StringField('Email', [
        validators.Length(min=2, max=35),
        validators.Email(message='Некорректный адрес электронной почты')])
    password = PasswordField('Пароль', [
        validators.DataRequired(),
        validators.Length(min=4, max=20),
        validators.EqualTo('confirm', message='Пароли не совпадают')])
    confirm = PasswordField('Подтверждение пароля')


class UpdateUser(Form):
    name = StringField('Фамилия', [validators.Length(min=1, max=255)])
    user_information = StringField('Дополнительная информация', [validators.Length(min=1, max=3000)])


class UpdateVmInfo(Form):
    information = StringField('Дополнительная информация', [validators.Length(min=0, max=1000)])


class UpdateUserPass(Form):
    new_password = PasswordField('Новый пароль', [validators.Length(min=4, max=255)])
    confirm_password = PasswordField('Подтвердите новый пароль',
                                     [validators.EqualTo('new_password', message='Passwords must match')])


class FormVirtualMachine(Form):
    hyper = StringField('Адрес гипервизора', [validators.Length(min=1, max=50)])
    ip_addres = StringField('Адрес виртуальной машины', [validators.Length(min=1, max=50)])
    id_vm = IntegerField('ID виртуальной машины', [validators.NumberRange(min=1, max=100)])
    name = StringField('Имя виртуальной машины', [validators.Length(min=1, max=100)])
    appointment = StringField('Назначение виртуальной машины', [validators.Length(min=1, max=100)])
    os = StringField('Операционная система виртуальной машины', [validators.Length(min=1, max=100)])
    memory = IntegerField('ОЗУ виртуальной машины', [validators.NumberRange(min=1, max=10000)])
    cpu = IntegerField('ЦПУ виртуальной машины', [validators.NumberRange(min=1, max=100)])
    technical = BooleanField()
