from datetime import datetime
from routes.v1 import db

class TimestampMixin(object):
    status = db.Column(db.Integer, nullable=False, default="5")
    deletion_marker = db.Column(db.Integer, nullable=True)
    created_at = db.Column(db.DateTime, nullable=False)
    updated_at = db.Column(db.DateTime)
    updated_by = db.Column(db.String(100))
    deleted_at = db.Column(db.DateTime)
    deleted_by = db.Column(db.String(100))
    session_id = db.Column(db.String(100), nullable=True)

    def serialize(self):
        return {
            'deletion_marker': self.deletion_marker,
            'created_at': self.created_at,
            'updated_at': self.updated_at,
            'status': self.status,
            'session_id' : self.session_id
        }

class Programs(db.Model, TimestampMixin):
    __table_name = 'programs'
    id = db.Column(db.Integer, primary_key=True)
    public_id = db.Column(db.String(255), nullable=False, unique=True, index=True)
    name = db.Column(db.String(255), nullable=False)
    description = db.Column(db.Text, nullable=False)
    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)
    price = db.Column(db.String(100), nullable=False)
    image = db.Column(db.String(200), nullable=True)
    max_applicants = db.Column(db.Integer, nullable=True)
    room_public_id = db.Column(db.String(200), nullable=True)
    currency = db.Column(db.String(100), nullable=False)
    clicks = db.Column(db.Integer, nullable=True)
    program_pdf = db.Column(db.String(255), nullable=True)

    def serialize(self):
        return {
            'name' : self.name,
            'public_id' : self.public_id,
            'description' : self.description,
            'start_date' : self.start_date,
            'end_date' : self.end_date,
            'status' : self.status,
            'session_id' : self.session_id,
            'created_at' : self.created_at,
            'price' : self.price,
            'image' : self.image,
            'max_applicants' : self.max_applicants,
            'room_public_id': self.room_public_id,
            'currency' : self.currency,
            'clicks' : self.clicks
         }


class Images(db.Model, TimestampMixin):
    __table_name = 'images'
    id = db.Column(db.Integer, primary_key=True)
    public_id = db.Column(db.String(255), nullable=False, unique=True, index=True)
    program_public_id = db.Column(db.String(200), nullable=False)
    image = db.Column(db.String(200), nullable=True)

    def serialize(self):
        return {
            'image' : self.image,
            'public_id': self.public_id,
            'program' : self.program_public_id
        }
