from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SubmitField
from wtforms.fields.html5 import DateField
from wtforms.validators import DataRequired, Optional, Email, EqualTo
from flask_wtf.file import FileField # Cuz' wtforms' FileField is shitty
import app.utils.validators as vd

class RegistrationForm(FlaskForm):
    username = StringField('Pseudonyme', validators=[DataRequired(), vd.name])
    email = StringField('Adresse Email', validators=[DataRequired(), Email(), vd.email])
    password = PasswordField('Mot de passe', validators=[DataRequired(), vd.password])
    password2 = PasswordField('Répéter le mot de passe', validators=[DataRequired(), EqualTo('password')])
    guidelines = BooleanField('J’accepte les <a href="#">CGU</a>', validators=[DataRequired()])
    newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.')
    submit = SubmitField('S\'enregistrer')

class UpdateAccountForm(FlaskForm):
    avatar = FileField('Avatar', validators=[Optional(), vd.avatar])
    email = StringField('Adresse Email', validators=[Optional(), Email(), vd.email, vd.old_password])
    password = PasswordField('Mot de passe :', validators=[Optional(), vd.password, vd.old_password])
    password2 = PasswordField('Répéter le mot de passe', validators=[Optional(), EqualTo('password')])
    old_password = PasswordField('Mot de passe actuel', validators=[Optional()])
    birthday = DateField('Anniversaire', validators=[Optional()])
    signature = TextAreaField('Signature', validators=[Optional()])
    biography = TextAreaField('Présentation', validators=[Optional()])
    newsletter = BooleanField('Inscription à la newsletter', description='Un mail par trimestre environ, pour être prévenu des concours, évènements et nouveautés.')
    submit = SubmitField('Mettre à jour')

class DeleteAccountForm(FlaskForm):
    delete = BooleanField('Confirmer la suppression', validators=[DataRequired()], description='Attention, cette opération est irréversible !')
    old_password = PasswordField('Mot de passe', validators=[DataRequired(), vd.old_password])
    submit = SubmitField('Supprimer le compte')