from flask import Flask, render_template, request, session
from scripts.utils import listNeeds, generatePropositionExample, evaluateProposition
from scripts.db_util import insert_user, fetch_user, UserNotFoundError


app = Flask(__name__)
app.secret_key = 'HrRdpsuJjIiOiPVdpqUk'

@app.route("/")
def index():
    return render_template("index.html")


@app.route("/login", methods = ['POST', 'GET'])
def login():
    if request.method == 'GET':
        return render_template("login.html")
    else:
        userName = request.form['username']
        password = request.form['password']
        try:
            user = fetch_user(userName, password)
            session['userName'] = user['user_name']
            session['teamName'] = user['team_name']
            session['emailAddress'] = user['email_address']
            return render_template("index.html")

        except UserNotFoundError:
            return render_template("login.html", msg="Username or password is incorrect. Please try again")

@app.route("/register", methods = ['POST', 'GET'])
def register():
    if request.method == 'GET':
        return render_template("register.html")
    else:
        userName = request.form['username']
        teamName = request.form['teamName']
        emailAddress = request.form['email']
        password = request.form['password']
        insert_user(userName, teamName, emailAddress, password)
        return render_template("login.html", msg="Thank you for Registering with us. Please login with your details")


@app.route("/game")
def startGame():
    moneyNeeds,_ = listNeeds('money_needs')
    customerExpNeeds,_ = listNeeds('customer_exp')
    sustainabilityNeeds,_ = listNeeds('sustainability')
    return render_template("newGame.html", moneyNeeds=moneyNeeds, customerExpNeeds=customerExpNeeds, sustainabilityNeeds=sustainabilityNeeds)

@app.route("/generate-proposition",  methods = ['POST'])
def generateProposition():
   
    print("Proposition generated")
    productType = request.form['productType']
    productName = request.form['productName']  
    
    moneyNeeds = request.form.getlist('moneyNeeds')
    customerExpNeeds = request.form.getlist('customerExpNeeds')
    sustainabilityNeeds = request.form.getlist('sustainabilityNeeds')
    
    generatedProposition = generatePropositionExample(productName, productType, moneyNeeds, customerExpNeeds, sustainabilityNeeds)
    print(generatedProposition)
    return generatedProposition



@app.route("/submit-proposition",  methods = ['POST'])
def submitProposition():
    print("Proposition submitted")
    city = request.form['city']
    
    productType = request.form['productType']
    subcount1 = request.form['subcount1']
    subcount2 = request.form['subcount2']
    subcount3 = request.form['subcount3']
    productName = request.form['productName']
    
    
    moneyNeeds = request.form.getlist('moneyNeeds')
    customerExpNeeds = request.form.getlist('customerExpNeeds')
    sustainabilityNeeds = request.form.getlist('sustainabilityNeeds')
    proposition = request.form['proposition']
        
    matchingTopologies, predictedSubscriberTakeOut = evaluateProposition(city, productType, proposition, moneyNeeds, customerExpNeeds, sustainabilityNeeds)

    return {'matchingTopologies': matchingTopologies, 'predictedSubscriberTakeOut': predictedSubscriberTakeOut, 'subscriberDiff': predictedSubscriberTakeOut-int(subcount3)}


if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=5000)