from flask_wtf import FlaskForm
from wtforms import SelectField, StringField, TextAreaField
from wtforms.validators import DataRequired, Length, Optional, Email, Regexp


class ProjectEnquiryForm(FlaskForm):
    """WTForm matching the project enquiry multi-step section fields."""
    
    # Contact fields included directly to ensure FlaskForm base is preserved
    name = StringField('Full Name', validators=[
        DataRequired(message="Please enter your full name."),
        Length(max=120, message="Name cannot exceed 120 characters.")
    ])
    
    email = StringField('Email Address', validators=[
        DataRequired(message="Please enter your email address."),
        Email(message="Please enter a valid email address."),
        Length(max=150, message="Email cannot exceed 150 characters.")
    ])
    
    phone = StringField('Phone / WhatsApp', validators=[
        Optional(),
        Regexp(r'^\+?[0-9\s\-]{7,30}$', message="Please enter a valid phone number.")
    ])

    service = SelectField('Service Required', choices=[
        ('Web Development', 'Web Development'),
        ('Mobile App Development', 'Mobile App Development'),
        ('UI/UX Design', 'UI/UX Design'),
        ('Cloud & DevOps', 'Cloud & DevOps'),
        ('Video Editing', 'Video Editing'),
        ('Digital Marketing', 'Digital Marketing'),
        ('Branding', 'Branding'),
        ('Others', 'Others')
    ], validators=[
        DataRequired(message="Please select a service.")
    ])
    
    project_title = StringField('Project Title / Brief Name', validators=[
        DataRequired(message="Please enter a project title or brief name."),
        Length(max=150, message="Project title cannot exceed 150 characters.")
    ])
    
    description = TextAreaField('Project Overview', validators=[
        DataRequired(message="Please provide a project overview."),
        Length(min=10, max=600, message="Project overview must be between 10 and 600 characters.")
    ])
    
    timeline = SelectField('Expected Timeline', choices=[
        ('', 'Select Timeline'),
        ('Less than 1 month', 'Less than 1 month'),
        ('1 - 3 months', '1 - 3 months'),
        ('3 - 6 months', '3 - 6 months'),
        ('Flexible', 'Flexible')
    ], validators=[
        Optional()
    ])