from models.configs.dbconfig import db, ma, hash_password, verify_password
from sqlalchemy import exc, and_

class SkitModel(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    description = db.Column(db.Text())
    post_type = db.Column(db.String(200))
    date = db.Column(db.String(200))
    tags = db.Column(db.Text())
    category = db.Column(db.String(200))
    files = db.Column(db.Text())
    is_commentable = db.Column(db.String(200))
    uid = db.Column(db.String(200))

    def __init__(self, uid, description, post_type, category, tags, is_commentable, date, files):
        self.uid = uid
        self.description = description
        self.post_type = post_type
        self.category = category
        self.tags = tags
        self.is_commentable = is_commentable
        self.files = files
        self.date = date

class StatusModel(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    text = db.Column(db.Text())
    type = db.Column(db.String(200))
    date = db.Column(db.String(200))
    files = db.Column(db.Text())
    is_commentable = db.Column(db.String(200))
    uid = db.Column(db.String(200))

    def __init__(self, uid, text, type, is_commentable, date, files):
        self.uid = uid
        self.text = text
        self.type = type
        self.is_commentable = is_commentable
        self.files = files
        self.date = date

class ReviewModel(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    uid = db.Column(db.BigInteger)
    skit_id = db.Column(db.BigInteger)
    comments = db.Column(db.Text())
    likes = db.Column(db.Text())

    def __init__(self, uid, skit_id, comments, likes):
        self.uid = uid
        self.skit_id = skit_id
        self.comments = comments
        self.likes = likes

class CategoriesModel(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50))
    subcategory = db.Column(db.String(5))
    parent = db.Column(db.String(50))
    summary = db.Column(db.Text())

    def __init__(self, name, summary, subcategory, parent):
        self.summary = summary
        self.name = name
        self.subcategory = subcategory
        self.parent = parent


class SkitSchema(ma.Schema):
    class Meta:
        fields = ('id', 'uid', 'description', 'post_type', 'tags', 'category', 'is_commentable', 'date', 'files')

class StatusSchema(ma.Schema):
    class Meta:
        fields = ('id', 'uid', 'text', 'type', 'is_commentable', 'date', 'files')

class CategoriesSchema(ma.Schema):
    class Meta:
        fields = ('name', 'summary', 'subcategory', 'parent')

class ReviewSchema(ma.Schema):
    class Meta:
        fields = ('uid', 'skit_id', 'comments', 'likes')

skit_scheme = SkitSchema()
skits_scheme = SkitSchema(many = True)

status_scheme = SkitSchema()
status_scheme = SkitSchema(many = True)

category_scheme = CategoriesSchema()
categories_scheme = CategoriesSchema(many = True)

review_scheme = ReviewSchema()
reviews_scheme = ReviewSchema(many = True)

db.create_all()