class Page(db.Model):
    page_id = db.Column(db.Integer, primary_key=True, nullable=False)
    service_id = db.Column(db.Integer, primary_key=True, nullable=False)
    page_items = db.relationship("PageItem",
                                 backref='page_item',
                                 lazy='dynamic')

    def __init__(self, service_id):
        self.service_id = service_id
class Crane(db.Model):
    crane_id = db.Column(db.Integer, primary_key=True, nullable=False)
    crane_name = db.Column(db.String(45), nullable=False)
    services = db.relationship("Service", backref='service',
                               lazy='dynamic')

    def __init__(self, crane_name):
        self.crane_name = crane_name

    def __repr__(self):
        return 'Crane(crane_name=%s)' % self.crane_name
class PageItem(db.Model):
    page_item_id = db.Column(db.Integer, primary_key=True, nullable=False)
    page_item_image = db.Column(db.String(255))
    page_item_text = db.Column(db.Text)
    page_id = db.Column(db.Integer,
                        db.ForeignKey('page.page_id'),
                        nullable=False)
    page_order = db.Column(db.Integer, nullable=False, unique=True)

    def __init__(self, page_item_image, page_item_text):
        self.page_item_image = page_item_image
        self.page_item_text = page_item_text
class Service(db.Model):
    service_id = db.Column(db.Integer, primary_key=True, nullable=False)
    service_name = db.Column(db.String(45), nullable=False)
    service_operation = db.Column(db.String(255), nullable=False)
    service_interval = db.Column(db.Integer, nullable=False)
    service_capacity_gallons = db.Column(db.Float, nullable=True)
    service_capacity_liters = db.Column(db.Float, nullable=True)
    crane_id = db.Column(db.Integer, db.ForeignKey('crane.crane_id'), nullable=False)
    engine_type = db.Column(db.Enum("upper", "lower"), nullable=False)
    service_logs = db.relationship("ServiceLog", backref='service_log', lazy='dynamic')
    service_audits = db.relationship("ServiceLog", backref='service_audit', lazy='dynamic')

    def __init__(self, name, operation, interval, crane_id, engine_type, capacity_gallons=None, capacity_liters=None):
        self.service_name = name
        self.service_operation = operation
        self.service_interval = interval
        self.crane_id = crane_id
        self.service_capacity_gallons = capacity_gallons
        self.service_capacity_liters = capacity_liters
        self.engine_type = engine_type

    def __repr__(self):
        return 'Service(service_name=%s, service_operation=%s)' % (
            self.service_name, self.service_operation
        )
class ServiceLog(db.Model):
    service_log_id = db.Column(db.Integer, primary_key=True, nullable=False)
    service_log_lastupdate = db.Column(db.DateTime, nullable=False)
    service_log_lastupdate_odo = db.Column(db.Integer, nullable=False)
    service_id = db.Column(db.Integer, db.ForeignKey('service.service_id'), nullable=False)

    def __init__(self, service_log_lastupdate_odo, service_id):
        self.service_log_lastupdate_odo = service_log_lastupdate_odo
        self.service_log_lastupdate = datetime.now()
        self.service_id = service_id

    def __repr__(self):
        return 'ServiceLog(lastupdate=%s, lastupdate_odo=%s, service_id=%s)' % (
            self.lastupdate, self.lastupdate_odo, self.service_id
        )
class ServiceAudit(db.Model):
    service_audit_id = db.Column(db.Integer, primary_key=True, nullable=False)
    service_audit_message = db.Column(db.Text, nullable=True)
    service_audit_lastupdate = db.Column(db.DateTime, nullable=False)
    service_audit_lastupdate_odo = db.Column(db.Integer, nullable=False)
    service_id = db.Column(db.Integer, db.ForeignKey('service.service_id'), nullable=False)

    def __init__(self, service_audit_lastupdate_odo, service_id, service_audit_message=""):
        self.service_audit_lastupdate_odo = service_audit_lastupdate_odo
        self.service_audit_lastupdate = datetime.now()
        self.service_id = service_id
        self.service_audit_message = service_audit_message

    def __repr__(self):
        return 'ServiceAudit(lastupdate=%s, lastupdate_odo=%s, service_id=%s)' % (
            self.lastupdate, self.lastupdate_odo, self.service_id
        )