import sqlite3

#Create a new row, for the account [compte] whith [points] points
def add_row(compte, points, mycursor, mydb):
    sql = "INSERT INTO daily (compte, points, date) VALUES (?, ?, date())"
    val = (compte, points)
    mycursor.execute(sql, val)
    mydb.commit()
    #printf(mycursor.rowcount, "record created.")


#update the ammount of points for the account [compte] 
def update_row(compte, points, mycursor, mydb):
    sql = f"UPDATE daily SET points = {points} WHERE compte = '{compte}' AND date = date() ;"
    mycursor.execute(sql)
    mydb.commit()
    #printf(mycursor.rowcount, "record(s) updated")

# update the value of last_pts for the table comptes
def update_last(compte, points, mycursor, mydb):
    sql1 = f"UPDATE comptes SET last_pts = {points} WHERE compte = '{compte}';"
    sql2 = f"select * from comptes where compte = '{compte}'"
    sql3 = f"INSERT INTO comptes (compte, last_pts,banned) VALUES ('{compte}', {points}, 0)"
    cmd = mycursor.execute(sql2)
    if len(list(cmd)) == 0:
        mycursor.execute(sql3)
    else :
        mycursor.execute(sql1)
    mydb.commit()
    #printf(mycursor.rowcount, "record(s) updated")

# if return if there already is a line in the database for the account [compte]. if same_point is enabled, the line must also have the same number of points
# SQLITE
def get_row(compte, points, mycursor, same_points = True): 
    if same_points :
        mycursor.execute(f"SELECT * FROM daily WHERE points = {points} AND compte = '{compte}' AND date = date() ;")
    else :
        mycursor.execute(f"SELECT * FROM daily WHERE compte = '{compte}' AND date = date() ;")
    myresult = mycursor.fetchall()
    return(len(myresult) == 1)


def add_to_database(compte, points, save_if_fail=True):
    if points is None:
        pass
    else:
        mydb = sqlite3.connect("/app/MsRewards-Reborn/MsRewards.db")
        mycursor = mydb.cursor()
        if get_row(compte, points,mycursor, True): #check if the row exist with the same ammount of points and do nothind if it does
            #printf("les points sont deja bon")
            #return(0)
            pass
        elif get_row(compte, points,mycursor, False) : #check if the row exist, but without the same ammount of points and update the point account then
            update_row(compte, points,mycursor,mydb)
            #printf("row updated")
            #return(1)
        else : # if the row don't exist, create it with the good ammount of points
            add_row(compte, points,mycursor,mydb)
            #return(2) #printf("row added")
        if int(points) > 10 :
            update_last(compte, points, mycursor, mydb)
        mycursor.close()
        mydb.close()