from flask_wtf import FlaskForm
from wtforms import (
    BooleanField,
    StringField,
    PasswordField,
    SubmitField,
    SelectField,
    IntegerField,
    SearchField,
    EmailField,
    TelField,
    DecimalField,
    TextAreaField,
    validators,
)
import datetime


class RegistrationForm(FlaskForm):
    username = StringField(
        "Username", [validators.DataRequired(), validators.Length(max=256)]
    )
    email = EmailField(
        "Email Address", [validators.DataRequired(), validators.Length(max=256)]
    )
    phone_number = TelField("Phone Number", [validators.DataRequired()])
    password = PasswordField(
        "New Password",
        [
            validators.InputRequired(),
            validators.EqualTo("confirm", message="Passwords must match"),
            validators.Length(min=6),
        ],
    )
    confirm = PasswordField(
        "Repeat Password",
        validators=[validators.DataRequired(), validators.EqualTo("password")],
    )
    accept_tos = BooleanField(
        "I accept the Terms of Service", [validators.DataRequired()]
    )
    submit = SubmitField("Sign Up", render_kw={"class": "button"})


class LoginForm(FlaskForm):
    username = StringField("Username")
    password = PasswordField("Password")
    securityQ1 = StringField("Enter your Favourite Colour", [validators.Length(max=30)])
    submit = SubmitField("Login", render_kw={"class": "button"})


class SearchForm(FlaskForm):
    query = SearchField(
        "Search", [validators.DataRequired()], render_kw={"placeholder": "Search"}
    )
    submit = SubmitField("Submit")


class AccessDataForm(FlaskForm):
    table = SelectField(
        "Table", choices=["Item", "Item Set"], validators=[validators.DataRequired()]
    )
    id = IntegerField("ID", [validators.DataRequired()])
    submit = SubmitField("Submit")


class AddForm(FlaskForm):
    table = SelectField(
        "Table", choices=["Item", "Item Set"], validators=[validators.DataRequired()]
    )
    description = StringField("Description", validators=[validators.DataRequired()])
    price = IntegerField(default=0, validators=[validators.InputRequired()])
    submit = SubmitField("Submit")