from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed
from wtforms import StringField, PasswordField, EmailField, SubmitField, SelectField, TextAreaField, IntegerField
from wtforms.validators import DataRequired, Email, Length, EqualTo, Optional

class TeacherForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=3, max=64)])
    email = EmailField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[Optional(), Length(min=6)])
    confirm_password = PasswordField('Confirm Password', validators=[
        EqualTo('password', message='Passwords must match')
    ])
    submit = SubmitField('Submit')
    
    def __init__(self, editing=False, *args, **kwargs):
        super(TeacherForm, self).__init__(*args, **kwargs)
        if not editing:
            # For creating new teachers, password is required
            self.password.validators = [DataRequired(), Length(min=6)]
        # For editing, password remains optional

class StudentForm(FlaskForm):
    username = StringField('Full Name', validators=[DataRequired(), Length(min=3, max=50)])
    email = EmailField('Email', validators=[DataRequired(), Email()])
    roll_number = StringField('Roll Number', validators=[DataRequired(), Length(min=3, max=20)])
    section = StringField('Section', validators=[DataRequired(), Length(max=10)])
    program = SelectField('Program', choices=[
        ('bs', 'BS'),
        ('masters', 'Masters'),
        ('phd', 'Ph.D')
    ], validators=[DataRequired()])
    department = SelectField('Department', choices=[
        ('cs', 'Computer Science'),
        ('math', 'Mathematics'),
        ('physics', 'Physics'),
        ('chemistry', 'Chemistry'),
        ('biology', 'Biology'),
        ('economics', 'Economics'),
        ('english', 'English'),
        ('urdu', 'Urdu'),
        ('islamic_studies', 'Islamic Studies'),
        ('history', 'History'),
        ('political_science', 'Political Science'),
    ], validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
    teacher = SelectField('Assigned Teacher', coerce=int, validators=[DataRequired()])
    submit = SubmitField('Add Student')

class ShortCourseForm(FlaskForm):
    title = StringField('Title', validators=[DataRequired(), Length(min=3, max=100)])
    description = StringField('Description', validators=[Length(max=255)])
    submit = SubmitField('Add Short Course')

class LearningCourseForm(FlaskForm):
    title = StringField('Title', validators=[DataRequired(), Length(min=3, max=100)])
    description = StringField('Description', validators=[Length(max=255)])
    submit = SubmitField('Add Learning Course')
class TeamMemberForm(FlaskForm):
    name = StringField('Full Name', validators=[DataRequired(), Length(min=3, max=100)])
    position = StringField('Position/Title', validators=[DataRequired(), Length(min=3, max=100)])
    team_type = SelectField('Team', choices=[
        ('academic', 'Academic Team'),
        ('technical', 'Technical Team'),
        ('administrative', 'Administrative Team')
    ], validators=[DataRequired()])
    description = TextAreaField('Description', validators=[DataRequired(), Length(min=10, max=500)])
    profile_picture = FileField('Profile Picture', validators=[
        FileAllowed(['jpg', 'jpeg', 'png', 'gif'], 'Images only!')
    ])
    avatar_initials = StringField('Avatar Initials (Fallback)', validators=[DataRequired(), Length(min=2, max=10)])
    avatar_color = SelectField('Avatar Color (Fallback)', choices=[
        ('from-blue-500 to-purple-600', 'Blue-Purple'),
        ('from-green-500 to-blue-600', 'Green-Blue'),
        ('from-purple-500 to-pink-600', 'Purple-Pink'),
        ('from-orange-500 to-red-600', 'Orange-Red'),
        ('from-teal-500 to-green-600', 'Teal-Green'),
        ('from-indigo-500 to-purple-600', 'Indigo-Purple'),
        ('from-yellow-500 to-orange-600', 'Yellow-Orange'),
        ('from-pink-500 to-rose-600', 'Pink-Rose'),
        ('from-cyan-500 to-blue-600', 'Cyan-Blue'),
    ], validators=[DataRequired()])
    order = IntegerField('Display Order', validators=[Optional()])
    submit = SubmitField('Save Team Member')