from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import relationship
from tasks import engine


Base = automap_base()


# Classes for database models
class Corpus(Base):
    __tablename__ = 'corpora'
    files = relationship('CorpusFile', collection_class=set)


class CorpusFile(Base):
    __tablename__ = 'corpus_files'


class Job(Base):
    __tablename__ = 'jobs'
    inputs = relationship('JobInput', collection_class=set)
    results = relationship('JobResult', collection_class=set)
    notification_data = relationship('NotificationData', collection_class=list)
    notification_email_data = relationship('NotificationEmailData',
                                           collection_class=list)


class JobInput(Base):
    __tablename__ = 'job_results'


class JobResult(Base):
    __tablename__ = 'job_results'


class NotificationData(Base):
    __tablename__ = 'notification_data'
    job = relationship('Job', collection_class=set)


class NotificationEmailData(Base):
    __tablename__ = 'notification_email_data'
    job = relationship('Job', collection_class=set)


class User(Base):
    __tablename__ = 'users'
    jobs = relationship('Job', collection_class=set)
    corpora = relationship('Corpus', collection_class=set)


Base.prepare(engine, reflect=True)