# coding: utf-8

'''

数据大屏服务

'''

from web_apps import db

from utils.query_utils import get_base_query

from utils.auth import set_insert_user, set_update_user, get_auth_token_info

from utils.common_utils import gen_json_response, gen_uuid

from utils.cache_utils import set_key_exp, get_key_value

from .db_models import ScreenProject

import json

from sqlalchemy import or_





def serialize_screen(obj, ser_type='list'):

    '''

    序列化大屏数据

    :param obj:

    :param ser_type:

    :return:

    '''

    dic = {

        'createTime': str(obj.create_time),

        'createUser': obj.create_by,

        'id': obj.id,

        'indexImage': obj.index_image,

        'isDelete': obj.del_flag,

        'projectName': obj.project_name,

        'remarks': obj.remarks,

        'state': obj.state

    }

    if ser_type == 'list':

        return dic

    elif ser_type == 'detail':

        dic['content'] = obj.content

    return dic





class ScreenService(object):

    def __init__(self):

        pass



    def get_obj_list(self, req_dict):

        '''

        获取列表

        '''

        page = req_dict.get('page', 1)

        limit = req_dict.get('limit', 12)

        user_info = get_auth_token_info()

        username = user_info['username']

        query = get_base_query(ScreenProject)

        if username != 'admin':

            query = query.filter(ScreenProject.create_by == username)

        total = query.count()

        page = int(page)

        pagesize = int(limit)

        query = query.offset((page - 1) * pagesize)

        query = query.limit(pagesize)

        obj_list = query.all()

        result = []

        for obj in obj_list:

            dic = serialize_screen(obj, ser_type='list')

            result.append(dic)

        return gen_json_response(data=result, extends={'count': total})



    def get_obj_detail(self, req_dict):

        '''

        获取详情

        '''

        obj_id = req_dict.get('projectId')

        obj = db.session.query(ScreenProject).filter(

            ScreenProject.id == obj_id,

            ScreenProject.del_flag == 0).first()

        if not obj:

            return gen_json_response(code=400, msg='未找到数据')

        dic = serialize_screen(obj, ser_type='detail')

        return gen_json_response(data=dic)



    def add_obj(self, req_dict):

        '''

        添加

        '''

        projectName = req_dict.get('projectName')

        exist_obj = db.session.query(ScreenProject).filter(

            ScreenProject.project_name == projectName,

            ScreenProject.del_flag == 0).first()

        if exist_obj:

            return gen_json_response(code=400, msg='数据已存在!')

        obj = ScreenProject()

        obj.id = gen_uuid(res_type='base')

        obj.project_name = req_dict.get('projectName')

        obj.remarks = req_dict.get('remarks', '')

        obj.index_image = req_dict.get('indexImage', '')

        set_insert_user(obj)

        db.session.add(obj)

        db.session.commit()

        db.session.flush()

        res_data = serialize_screen(obj, ser_type='list')

        return gen_json_response(data=res_data, msg='添加成功。')



    def update_obj(self, req_dict):

        '''

        更新

        '''

        obj_id = req_dict.get('id')

        projectName = req_dict.get('projectName')

        exist_obj = db.session.query(ScreenProject).filter(

            ScreenProject.id != obj_id,

            ScreenProject.project_name == projectName,

            ScreenProject.del_flag == 0).first()

        if exist_obj:

            return gen_json_response(code=400, msg='数据已存在!')

        obj = db.session.query(ScreenProject).filter(ScreenProject.id == obj_id).first()

        if obj is None:

            return gen_json_response(code=400, msg='找不到该对象!')

        project_name = req_dict.get('projectName')

        if project_name:

            obj.project_name = project_name

        obj.remarks = req_dict.get('remarks', '')

        index_image = req_dict.get('indexImage', '')

        if index_image != '':

            obj.index_image = index_image

        set_update_user(obj)

        db.session.add(obj)

        db.session.commit()

        db.session.flush()

        return gen_json_response(code=200, msg='更新成功。')



    def save_obj_data(self, req_dict):

        '''

        更新数据

        '''

        obj_id = req_dict.get('projectId')

        obj = db.session.query(ScreenProject).filter(ScreenProject.id == obj_id).first()

        if obj is None:

            return gen_json_response(code=400, msg='找不到该对象!')

        obj.content = req_dict.get('content')

        project_name = req_dict.get('projectName')

        if project_name:

            obj.project_name = project_name

        set_update_user(obj)

        db.session.add(obj)

        db.session.commit()

        db.session.flush()

        return gen_json_response(code=200, msg='更新成功。')



    def handle_publish_obj(self, req_dict):

        '''

        发布

        '''

        obj_id = req_dict.get('id')

        obj = db.session.query(ScreenProject).filter(ScreenProject.id == obj_id).first()

        if obj is None:

            return gen_json_response(code=400, msg='找不到该对象!')

        obj.state = req_dict.get('state')

        set_update_user(obj)

        db.session.add(obj)

        db.session.commit()

        db.session.flush()

        return gen_json_response(code=200, msg='更新成功。')



    def delete_obj(self, req_dict):

        '''

        删除

        '''

        if 'id' in req_dict:

            del_ids = [req_dict['id']]

        elif 'ids' in req_dict:

            del_ids = str(req_dict['ids']).split(',')

        else:

            del_ids = req_dict

        del_objs = db.session.query(ScreenProject).filter(ScreenProject.id.in_(del_ids)).all()

        print(del_objs)

        for del_obj in del_objs:

            del_obj.del_flag = 1

            set_update_user(del_obj)

            db.session.add(del_obj)

            db.session.commit()

            db.session.flush()

        return gen_json_response(code=200, msg='删除成功。')