from models.modules.core import logger, request, InvalidUsage, make_response, app, url_for
from models.libs.jwt import decodejwt, get_userinfo
from models.dbmodels.skits_model import *
from datetime import datetime
import ast

class Statuses(object):    
    def get_followers_status():
        try:
            userInfo = dict(decodejwt())

        except exc.SQLAlchemyError as e:
            raise Exception(e._message)
        except Exception as e:
            raise Exception(str(e))
        
    def add_status():
        try:
            userInfo = dict(decodejwt())
            type = request.json['type']
            text = request.json['text']
            files = request.json['files']
            is_commentable = request.json['is_commentable']

            date = datetime.now().utcnow()
            statusinfo = StatusModel(userInfo['uid'], text, type, is_commentable, date, str(files))
            db.session.add(statusinfo)
            db.session.flush()
            status_id = str(statusinfo.id)

            reviewinfo = ReviewModel(userInfo['uid'], status_id, str([]), str([]))
            db.session.add(reviewinfo)
            db.session.commit()

            db.session.close()
            return make_response({
                "message": "skits saved",
            }, 200)

        except exc.SQLAlchemyError as e:
            raise Exception(e._message)
        except Exception as e:
            raise Exception(str(e))  

    def delete(id):
        try:
            status = StatusModel.query.filter_by(id = id).first()
            if not status:
                return make_response({
                    "error": "no status info found"
                }, 400)
                
            db.session.delete(staus)
            db.session.commit()
            db.session.close()
            return make_response({
                "message": "status deleted successfully",
            }, 200)
        except exc.SQLAlchemyError as e:
            raise Exception(e._message)
        except Exception as e:
            raise Exception(str(e))