import threading
import FlaskApp.app.auth_real_python as arp
from flask_login import UserMixin
import FlaskApp.app.common as common
import traceback

lock = threading.Lock()

class User(UserMixin):
    def __init__(self, id_, name, email, profile_pic):
        self.id = id_
        self.name = name
        self.email = email
        self.profile_pic = profile_pic

    @staticmethod
    def get(user_id):
        #sql_query = """SELECT name FROM sqlite_master  WHERE type='table';"""
        #arp.cursor.execute(sql_query)
        #common.logger.debug(str(arp.cursor.fetchall()))
        sql = "SELECT * FROM user WHERE id = ?"
        #common.logger.debug('get lock waiting' + str(traceback.extract_stack()))
        lock.acquire(True)
        #common.logger.debug('get lock acquired')
        arp.cursor.execute(sql,(user_id,))
        user = arp.cursor.fetchone()
        lock.release()
        #common.logger.debug('get lock released')

        if not user:
            return None

        user = User(
            id_=user[0], name=user[1], email=user[2], profile_pic=user[3]
        )
        return user

    @staticmethod
    def create(id_, name, email, profile_pic):
        sql = "INSERT INTO user (id, name, email, profile_pic) VALUES(?,?,?,?)"
        #common.logger.debug('create lock waiting' + str(traceback.extract_stack()))
        lock.acquire(True)
        #common.logger.debug('create lock acquired')
        arp.cursor.execute(sql,(id_, name, email, profile_pic))
        arp.conn.commit()
        lock.release()
        #common.logger.debug('create lock released')
