class Answers(db.Model):
    answer_id = db.Column(db.Integer, primary_key=True)
    answer_title = db.Column(db.String(200), nullable=False)
    scores = db.Column(db.String(30), default='Not checked yet')
    owner = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    task_id = db.Column(db.Integer,
                        db.ForeignKey('tasks.task_id'),
                        nullable=False)

    def __repr__(self):
        return self.answer_title
class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    firstname = db.Column(db.String(64))
    lastname = db.Column(db.String(64))
    email = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(200))
    user_level = db.Column(db.Integer, nullable=False)

    def hash_password(self):
        self.password = generate_password_hash(self.password, method='sha256')

    def check_password(self, password):
        return check_password_hash(self.password, password)

    def __repr__(self):
        return '{} {}'.format(self.firstname, self.lastname)
class Theory(db.Model):
    theory_id = db.Column(db.Integer, primary_key=True)
    theory_name = db.Column(db.String(200), unique=True)
    class_id = db.Column(db.Integer,
                         db.ForeignKey('classes.class_id'),
                         nullable=False)

    def __repr__(self):
        return self.theory_name
class Tasks(db.Model):
    task_id = db.Column(db.Integer, primary_key=True)
    task_title = db.Column(db.String(200), unique=True)
    task_desc = db.Column(db.Text)
    class_id = db.Column(db.Integer,
                         db.ForeignKey('classes.class_id'),
                         nullable=False)
    answers = db.relationship('Answers', backref='tasks', lazy=True)

    def __repr__(self):
        return self.task_title
class Class(db.Model):
    __tablename__ = 'classes'
    class_id = db.Column(db.Integer, primary_key=True)
    classname = db.Column(db.String(128), unique=True)
    theories = db.relationship('Theory', backref='classes', lazy=True)
    tasks = db.relationship("Tasks", backref='classes', lazy=True)
    users = db.relationship("User",
                            secondary=user_identifier,
                            backref=db.backref('classes', lazy='dynamic'))

    def __repr__(self):
        return self.classname