from flask import session
import pymysql.cursors
from werkzeug.security import check_password_hash, generate_password_hash



def get_db():
    db = pymysql.connect(
        host='localhost',
        user='figo',
        password='scolari',
        database='db_figo',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor)
    return db


def register_user(username,password):
    error = None
    try:
        db = get_db()
        db.cursor().execute(
            "INSERT INTO users (username, password) VALUES (%s, %s)",
            (username, generate_password_hash(password)),
        )
        db.commit()
    except db.IntegrityError:
        error = f"User {username} is already registered."
    return error

def login_user(username,password):
    error = None    
    db = get_db().cursor()
    db.execute(
        'SELECT * FROM users WHERE username = %s', (username,)
    )
    user = db.fetchone()

    if user is None:
        error = 'Incorrect credentials.'
    elif not check_password_hash(user['password'], password):
        error = 'Incorrect credentials.'

    else:
        # user credentials valid, open session!
        session.clear()
        session['user_id'] = user['id']

    return error

def get_files(user_id):
    db = get_db().cursor()
    query = f"SELECT * FROM files WHERE owner='{user_id}'"
    db.execute(query)         
    return db.fetchall()

def get_file_name(id):
    db = get_db().cursor()
    query = f"SELECT * FROM files WHERE id='{id}'"
    db.execute(query)   
    file = db.fetchone()  
    return file['name']

def file_insert(name):
    error = None
    try:
        db = get_db()
        db.cursor().execute(
            "INSERT INTO files (name, owner) VALUES (%s, %s)",
            (name, session['user_id']),
        )
        db.commit()  
    except db.IntegrityError:
        error = f"File '{name}' is already uploaded."
    return error

def file_remove(id):
    db = get_db()
    db.cursor().execute(
        'DELETE FROM files WHERE id = %s', 
        (id)
    )
    db.commit()  