# Path: pyfeedreader/models/ReadEntries.py
# class ReadEntry(Model):
#     __tablename__ = "read_entry"
#     id = Column('id', Integer, primary_key=True)
#     entry_id = Column(Integer)
#     user_id = Column(Integer, ForeignKey('user.id'))
# 
#     def __init__(self, entry_id, user_id):
#         self.entry_id = entry_id
#         self.user_id = user_id
# 
#     def __repr__(self):
#         return '<ReadEntry %r>' % self.username
# 
# Path: pyfeedreader/models/entry.py
# class Entry(Model):
#     __tablename__ = "entry"
#     id = Column('id', Integer, primary_key=True)
#     feed_id = Column(Integer)
#     published = Column(Integer)
#     updated = Column(Integer)
#     title = Column(String(1024))
#     content = Column(Text)
#     description = Column(String(256))
#     link = Column(String(1024))
#     remote_id = Column(String(1024))
# 
#     def __init__(self, feed_id=None, published=None, updated=None, title=None, content=None, description=None,
#                  link=None, remote_id=None, unread=True):
#         self.feed_id = feed_id
#         self.published = published
#         self.updated = updated
#         self.title = title
#         self.content = content
#         self.description = description
#         self.link = link
#         self.remote_id = remote_id
#         self.unread = unread
# 
#     @staticmethod
#     def json_entry(entry, db_session, user_id):
#         """
#         Turns the entry object into a JSON ready dict object.
# 
#         :param entry: The entry you want to make JSON ready.
# 
#         :return: The JSON ready dict.
#         """
# 
#         read_entry = db_session.query(ReadEntry).filter(ReadEntry.entry_id == entry.id,
#                                                         ReadEntry.user_id == user_id).first()
#         unread = read_entry is None
# 
#         return {
#             "entry_id": entry.id,
#             "feed_id": entry.feed_id,
#             "published": entry.published,
#             "updated": entry.updated,
#             "title": entry.title,
#             "content": entry.content,
#             "description": entry.description,
#             "link": entry.link,
#             "remote_id": entry.remote_id,
#             "unread": unread,
#         }
# 
#     @staticmethod
#     def json_list(entries, db_session, user_id):
#         """
#         Turns a list of entries into JSON ready entries.
# 
#         :param entries: The list of entries you want to turn into JSON ready dicts.
# 
#         :return: List of JSON ready dicts.
#         """
# 
#         json_ready = []
#         for entry in entries:
#             json_ready.append(
#                 Entry.json_entry(entry, db_session, user_id)
#             )
# 
#         return json_ready
# 
# Path: pyfeedreader/database.py
# def init_db():
# def drop_all():


from pyfeedreader.models.ReadEntries import ReadEntry
from pyfeedreader.models.entry import Entry
from sqlalchemy import Column, Integer, String, desc
from pyfeedreader.database import Model

    @staticmethod
    def json(feed):
        """
        Turns a single feed into a json ready dict.

        :param feed The feed to turn to json ready.
        """
        return {
            "feed_url": feed.feed_url,
            "title": feed.title,
            "favicon": feed.favicon,
            "id": feed.id,
            "unread": feed.unread,
        }

    @staticmethod
    def unread(feed, db_session, limit=100):
        """
        Finds the number of unread entries for the feed, it will only check the amount of entries specified in in the
        limit parameter, some feeds might have thousands of entries and it would take too long to check them all.

        :param feed: The feed you want to check.
        :param db_session: Current database session.
        :param limit: The limit of entries to be checked, by default this is set to 100.
        :return: The updated feed object.
        """

        entries = db_session.query(Entry).filter(
            Entry.feed_id == feed.id).order_by(

# Path: pyfeedreader/models/ReadEntries.py
# class ReadEntry(Model):
#     __tablename__ = "read_entry"
#     id = Column('id', Integer, primary_key=True)
#     entry_id = Column(Integer)
#     user_id = Column(Integer, ForeignKey('user.id'))
# 
#     def __init__(self, entry_id, user_id):
#         self.entry_id = entry_id
#         self.user_id = user_id
# 
#     def __repr__(self):
#         return '<ReadEntry %r>' % self.username
# 
# Path: pyfeedreader/models/entry.py
# class Entry(Model):
#     __tablename__ = "entry"
#     id = Column('id', Integer, primary_key=True)
#     feed_id = Column(Integer)
#     published = Column(Integer)
#     updated = Column(Integer)
#     title = Column(String(1024))
#     content = Column(Text)
#     description = Column(String(256))
#     link = Column(String(1024))
#     remote_id = Column(String(1024))
# 
#     def __init__(self, feed_id=None, published=None, updated=None, title=None, content=None, description=None,
#                  link=None, remote_id=None, unread=True):
#         self.feed_id = feed_id
#         self.published = published
#         self.updated = updated
#         self.title = title
#         self.content = content
#         self.description = description
#         self.link = link
#         self.remote_id = remote_id
#         self.unread = unread
# 
#     @staticmethod
#     def json_entry(entry, db_session, user_id):
#         """
#         Turns the entry object into a JSON ready dict object.
# 
#         :param entry: The entry you want to make JSON ready.
# 
#         :return: The JSON ready dict.
#         """
# 
#         read_entry = db_session.query(ReadEntry).filter(ReadEntry.entry_id == entry.id,
#                                                         ReadEntry.user_id == user_id).first()
#         unread = read_entry is None
# 
#         return {
#             "entry_id": entry.id,
#             "feed_id": entry.feed_id,
#             "published": entry.published,
#             "updated": entry.updated,
#             "title": entry.title,
#             "content": entry.content,
#             "description": entry.description,
#             "link": entry.link,
#             "remote_id": entry.remote_id,
#             "unread": unread,
#         }
# 
#     @staticmethod
#     def json_list(entries, db_session, user_id):
#         """
#         Turns a list of entries into JSON ready entries.
# 
#         :param entries: The list of entries you want to turn into JSON ready dicts.
# 
#         :return: List of JSON ready dicts.
#         """
# 
#         json_ready = []
#         for entry in entries:
#             json_ready.append(
#                 Entry.json_entry(entry, db_session, user_id)
#             )
# 
#         return json_ready
# 
# Path: pyfeedreader/database.py
# def init_db():
# def drop_all():


# Path: pyfeedreader/models/feed.py
from pyfeedreader.models.ReadEntries import ReadEntry
from pyfeedreader.models.entry import Entry
from sqlalchemy import Column, Integer, String, desc
from pyfeedreader.database import Model


    @staticmethod
    def json(feed):
        """
        Turns a single feed into a json ready dict.

        :param feed The feed to turn to json ready.
        """
        return {
            "feed_url": feed.feed_url,
            "title": feed.title,
            "favicon": feed.favicon,
            "id": feed.id,
            "unread": feed.unread,
        }

    @staticmethod
    def unread(feed, db_session, limit=100):
        """
        Finds the number of unread entries for the feed, it will only check the amount of entries specified in in the
        limit parameter, some feeds might have thousands of entries and it would take too long to check them all.

        :param feed: The feed you want to check.
        :param db_session: Current database session.
        :param limit: The limit of entries to be checked, by default this is set to 100.
        :return: The updated feed object.
        """

        entries = db_session.query(Entry).filter(
            Entry.feed_id == feed.id).order_by(

            desc(Entry.updated)).limit(limit).all()