from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, SelectField
from wtforms.validators import DataRequired, Email, Length, EqualTo, ValidationError, Optional
import re

def validate_username(form, field):
    # Keep spaces and remove only special characters
    username = re.sub(r'[^\w\s-]', '', field.data)
    username = username.strip()
    field.data = username

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

class SignupForm(FlaskForm):
    username = StringField('Full Name', validators=[
        DataRequired(), 
        Length(min=2, max=64),
        validate_username
    ])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[
        DataRequired(),
        Length(min=6, message='Password must be at least 6 characters long')
    ])
    confirm_password = PasswordField('Confirm Password', validators=[
        DataRequired(),
        EqualTo('password', message='Passwords must match')
    ])
    roll_number = StringField('Roll Number', validators=[DataRequired()])
    section = StringField('Section', validators=[DataRequired()])
    program = StringField('Program', validators=[DataRequired()])
    department = StringField('Department', validators=[DataRequired()])
    enrolling_course = SelectField('Enrolling Course', choices=[], validators=[Optional()])
    submit = SubmitField('Sign Up')
