class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text, nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.now)
    thread_id = db.Column(db.Integer, db.ForeignKey('thread.id'))
    uid = db.Column(db.Integer, db.ForeignKey('User.uid'), nullable=False)

    def __repr__(self):
        return '<Comment %r>' % self.content
class WishlistComment(db.Model):
    __tablename__ = 'WishlistComment'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(200))
    timestamp = db.Column(db.DateTime, default=datetime.now)
    wishlist_id = db.Column(db.Integer, db.ForeignKey('Wishlist.id'))
    uid = db.Column(db.Integer, db.ForeignKey('User.uid'), nullable=False)

    def __repr__(self):
        return '<WishlistComment %r>' % self.body
class Thread(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.now)
    uid = db.Column(db.Integer, db.ForeignKey('User.uid'), nullable=False)
    comments = db.relationship('Comment',
                               backref="thread",
                               cascade="all, delete, delete-orphan")

    def __repr__(self):
        return '<Thread %r>' % self.title
class Wishlist(db.Model):
    __tablename__ = "Wishlist"
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(200), nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.utcnow)
    user_uid = db.Column(db.Integer, db.ForeignKey('User.uid'), nullable=False)
    wishlist_sub = db.relationship('child', backref='wishlist')
    liked = db.relationship('LikedWishlist',
                            backref='wishlist',
                            lazy='dynamic')
    comment = db.relationship('WishlistComment',
                              backref='wishlist',
                              lazy='dynamic')

    def __repr__(self):
        return f"User('{self.id}', '{self.content}', '{self.user_uid}')"
class child(db.Model):
    __tablename__ = "sub"
    id = db.Column(db.Integer, primary_key=True)
    child_content = db.Column(db.String(200), nullable=False)
    Wishlist_id = db.Column(db.Integer,
                            db.ForeignKey('Wishlist.id'),
                            nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.utcnow)
    prices = db.Column(db.String(200), nullable=True)
    image_file = db.Column(db.String(200), nullable=False)
    ebay_id = db.Column(db.String(200), nullable=True)
class User(db.Model):
    __tablename__ = "User"  #creating a user model using flask sqlalchemy
    uid = db.Column(
        db.Integer,
        primary_key=True)  #the id created when adding a session to the user
    firstname = db.Column(
        db.String(100), nullable=False
    )  #the information that will be stored in each corresponding column in the db
    lastname = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), unique=True, nullable=False)
    username = db.Column(db.String(100), unique=True, nullable=False)
    pass_hash = db.Column(db.String(100), nullable=False)
    user_wishlist = db.relationship('Wishlist', backref='user')
    liked = db.relationship('LikedWishlist', backref='user', lazy='dynamic')
    wishlist_comment = db.relationship('WishlistComment',
                                       backref='user',
                                       lazy='dynamic')

    def __repr__(self):
        return f"User('{self.uid}', '{self.firstname}', '{self.lastname}', '{self.email}', '{self.username}')"
class LikedWishlist(db.Model):
    __tablename__ = 'LikedWishlist'
    id = db.Column(db.Integer, primary_key=True)
    user_uid = db.Column(db.Integer, db.ForeignKey('User.uid'))
    Wishlist_id = db.Column(db.Integer, db.ForeignKey('Wishlist.id'))
class cronScheduler(db.Model, SerializerMixin):
    __tablename__ = 'cronScheduler'
    id = db.Column(db.Integer, primary_key=True)
    ebay_id = db.Column(db.String(200), nullable=True)
    date_created = db.Column(db.DateTime, default=datetime.now)
    prices = db.Column(db.String(200), nullable=True)