from flask import flash, render_template, Blueprint, request, session
from create_db import User, get_session, get_engine
import json


bp = Blueprint('settings', __name__, url_prefix='/settings')

def get_settings(user_id):
    """get settings from db, turns it into a dict and returns it"""
    Session = get_session()
    with Session() as dbsession:
        user = dbsession.query(User).get(user_id)
        #tu rešujejo none user bug, ki se pojavi, ko na novo reg user, ni zazznan v querryju
        # zdaj imamo problem clasha med globalno in lokalno spremenljivko "dbsession"
        if user == None:
            user = dbsession.query(User).get(user_id)
        
        settings_db = user.settings
        if settings_db == "":
            #userji se zaenkrat generirajo brez settingsov aka empty string, zato dodamo te defaulte
            settings_dict = {
                "max_new"     : 5,
                "max_due"     : 5,
                "max_shared"  : 5,
            }
        else:
            settings_dict = json.loads(settings_db)
        
        dbsession.close()
    
    get_engine().dispose()
    return settings_dict


@bp.route("/save_settings", methods=["GET", "POST"])
def save_settings():
    """takes a dict of settings turns it into json and updates the database with it"""
    
    
    user_id = session['user_id']
    username = session['username']
    
    if request.method == "GET":
        settings_old = get_settings(user_id)
        return render_template("settings.html", username=username, settings=settings_old)
    
    if request.method == "POST":
        #request form stuff
        settings_dict = {
                "max_new"     : request.form.get('max_new', False),
                "max_due"     : request.form.get('max_due', False),
                "max_shared"  : request.form.get('max_shared', False),
        }
        Session = get_session()
        with Session() as dbsession:
            settings_json = json.dumps(settings_dict)
            user = dbsession.query(User).get(user_id)
            
            user.settings = settings_json
            dbsession.commit()
            dbsession.close()
            flash("settings updated")
        get_engine().dispose()
        
    return render_template("settings.html", username=username, settings=settings_dict)