from flask import Blueprint,render_template, request, flash,redirect, url_for
from website.Models.models import User
from website import  db
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import  login_user,login_required, logout_user, current_user

auth = Blueprint('auth',__name__)

@auth.route('/login',methods=['GET','POST'])
def login():
    if request.method=='POST':
        email = request.form.get('email')
        password = request.form.get('password1')

        user = User.query.filter_by(email=email).first()
        if user:
            if check_password_hash(user.password,password):
                flash('Logged in successfully!', category='success')
                login_user(user, remember=True)
                return redirect(url_for('views.notes'))
            else:
                flash("Incorrect password, try again", category='error')
        else:
            flash("Email does not exist",category='error')
    return render_template("login.html", user=current_user)

@auth.route('/logout')
@login_required
def logout():
    logout_user()
    return  redirect(url_for('auth.login'))

@auth.route('/signup', methods=['GET','POST'])
def sign_up():
    if request.method == 'POST':
        email = request.form.get('email')
        first_name = request.form.get('FirstName')
        pass1=request.form.get('password1')
        pass2=request.form.get('password2')

        user = User.query.filter_by(email=email).first()
        if user:
            flash('Email already exists!',category='error')
        elif len(email) < 4:
            flash('Email must be greater than 3 character.', category='error')
        elif len(first_name)<2:
            flash('First name must be greater than 1 character.', category='error')
        elif pass1 != pass2:
            flash('Passwords don\'t match .', category='error')
        elif len(pass1) < 7:
            flash('Password  must be at least 4 character.', category='error')
        else:
            new_user = User(email=email,first_name=first_name, password =generate_password_hash(pass1,method='sha256') )
            db.session.add(new_user)
            db.session.commit()
            login_user(new_user, remember=True)
            flash('Account created!.', category='success')
            return redirect(url_for('views.notes'))

    return render_template("signup.html", user=current_user)
