from website import db, Users
from flask import Blueprint, render_template, request, redirect, session
from website.Map import validate_page_access
from sqlalchemy.exc import SQLAlchemyError
import logging

Login = Blueprint('Login', __name__)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

@Login.route('/loginArchive', methods=['GET', 'POST'])
def loginArchive():
    try:
        redirect_check = validate_page_access(session.get('page'), ['/login', '/Intro', '/Base'])
        if redirect_check:
            return redirect_check

        if request.method == 'POST':
            firstName = request.form.get('fname')
            lastName = request.form.get('lname')
            email = request.form.get('email')
            userAge = request.form.get('age')

            if not (firstName and lastName and email and userAge):
                logger.warning("Missing required fields in login form")
                return "Missing required fields", 400

            try:
                # Insert user input into the database using SQLAlchemy
                users = Users(
                    usersFName=firstName, 
                    usersLName=lastName, 
                    usersEmail=email, 
                    usersAge=userAge
                )
                db.session.add(users)
                db.session.commit()
                user = Users.query.filter_by(usersEmail=email, usersAge=userAge).order_by(Users.usersId.desc()).first()
                if user:
                    session['usersId'] = user.usersId  # Store the user's ID in the session
                else:
                    raise ValueError("User not found after commit")

                session['page'] = '/login'
                logger.info(f"Accessed page: {session.get('page')}")

                return redirect('Base')

            except SQLAlchemyError as e:
                logger.error(f"Database error during login: {e}")
                db.session.rollback()
                return "Database error", 500
            except Exception as e:
                logger.error(f"Unexpected error during login: {e}")
                return "An unexpected error occurred", 500

        return render_template("Intro/Base.html")

    except Exception as e:
        logger.error(f"Unexpected error in login route: {e}")
        return "An unexpected error occurred", 500
