from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, IntegerField
from wtforms.validators import Length, EqualTo, Email, DataRequired, ValidationError, NumberRange
from catconnect.models import User
from catconnect.models import Item


class RegisterForm(FlaskForm):

    def validate_username(self, username_to_check):
        user = User.query.filter_by(username=username_to_check.data).first()
        if user:
            raise ValidationError('Username already exists! Please try a different username.')

    def validate_email_address(self, email_address_to_check):
        email_address = User.query.filter_by(email_address=email_address_to_check.data).first()
        if email_address:
            raise ValidationError('Email address already exists! Please try a different email address.')


    username = StringField(label='User Name:', validators=[Length(min=2, max=30), DataRequired()])
    email_address = StringField(label='Email Address', validators=[Email(), DataRequired()])
    password1 = PasswordField(label='Password:', validators=[Length(min=6), DataRequired()])
    password2 = PasswordField(label='Confirm Password:', validators=[EqualTo('password1'), DataRequired()])
    submit = SubmitField(label='Create Account')


class LoginForm(FlaskForm):
    username = StringField(label='User Name:', validators=[DataRequired()])
    password = PasswordField(label='Password:', validators=[DataRequired()])
    submit = SubmitField(label='Sign In')

class CatAdoptForm(FlaskForm):
    submit = SubmitField(label='Adopt')

class CancelAdoptForm(FlaskForm):
    submit = SubmitField(label='Cancel Adoption')

class AddForm(FlaskForm):
    cat_name = StringField(label='Cat Name:', validators= [Length(min=2, max=30),DataRequired()])
    cat_age = IntegerField(label='Cat Age:', validators= [NumberRange(min=0, max=20), DataRequired()])
    cat_breed = StringField(label='Cat Breed:', validators= [Length(min=5, max=20),DataRequired()])
    cat_description = StringField(label='Cat Description:', validators= [Length(min=5, max=60), DataRequired()])
    submit = SubmitField(label='Add Cat')