import json
from utils.base import APIView
from utils.logger import error_logger


class PictorialListView(APIView):
    def get(self, request):
        star_id = request.GET.get('star_id')
        user_id = request.GET.get('user_id')
        offset = int(request.GET.get('page', 1))
        limit = int(request.GET.get('limit', 10))
        filters = self.handle_filter(request.GET.get('filter', '{}'))
        if star_id:
            filters.update({'star_id': star_id})
        if user_id:
            filters.update({'user_id': user_id})
        try:
            data = self.rpc['venus/sun/pictorial/list'](filters=filters, offset=(offset-1)*limit, limit=limit).unwrap()
        except Exception as e:
            error_logger.error(u'获取画报列表失败%s' , e)
            raise
        return data

    def post(self, request):
        ids = json.loads(request.POST.get('ids', '[]'))
        updates = json.loads(request.POST.get('update', '{}'))
        try:
            self.rpc['venus/sun/pictorial/batch/update'](updates=updates, ids=ids).unwrap()
        except Exception as e:
            error_logger.error(u'批量更新失败%s', e)
            raise
        return {
            "message": "更新成功"
        }


class PictorialUpdateOrCreate(APIView):
    def get(self, request):
        id = request.GET.get('id').split(':')[0]
        try:
            data = self.rpc['venus/sun/pictorial/get'](id=id).unwrap()
        except Exception as e:
            error_logger.error(u'获取%s画报信息失败%s'%(id, e))
            raise
        return data

    def post(self, request):

        id = int(request.POST.get('id')) if request.POST.get('id') else None
        star_ids = json.loads(request.POST.get('star', '[]'))
        collection_tag_ids = json.loads(request.POST.get('collection_tag_ids', '[]'))
        pictorial_activity_id = request.POST.get('pictorial_activity_id')
        tab_config = request.POST.get("tab_config", "[]")
        data = {
            'name': request.POST.get('name', ''),
            'description': request.POST.get('description', ''),
            'creator_id': request.POST.get('creator_id', ''),
            'celebrity_ids': star_ids,
            'is_online': int(request.POST.get('is_online', 1)),
            'is_recommend': int(request.POST.get('is_recommend', 0)),
            'icon': request.POST.get('icon', ''),
            'collection_tag_ids': collection_tag_ids,
            'is_home_recommend': int(request.POST.get('is_home_recommend', 0)),
            'add_score': int(request.POST.get('add_score', 0)),
            'is_public': True if request.POST.get('is_public') == "true" else False,
            'is_finished': int(request.POST.get('is_finished', 1)),
            'is_feed': int(request.POST.get('is_feed', 0)),
            'pictorial_activity_ids': [int(pictorial_activity_id)] if pictorial_activity_id else [],
            'alias': request.POST.get('alias', ''),
            'comment_talk': request.POST.get('pictorial_comment_talk', ''),
            'tab_config': json.loads(tab_config),
        }
        try:
            data = self.rpc['venus/sun/pictorial/edit'](id=id, data=data).unwrap()
        except Exception as e:
            error_logger.error(u'编辑%s用户信息失败%s' % (id, e))
            raise
        if not data.get('id'):
            return {
                'message': '画报已存在'
            }
        return {
            'message': '更新成功',
            'data': data
        }

    
class PictorialTopics(APIView):
    """多个帖子关系"""

    def post(self, request):
        topic_ids = json.loads(request.POST.get('topic_ids', '[]'))
        pictorial_id = request.POST.get('pictorial_id')

        try:
            self.rpc['venus/sun/pictorial/add_topics'](topic_ids=topic_ids, pictorial_id=pictorial_id).unwrap()
        except Exception as e:
            error_logger.error(u'编辑%s用户信息失败%s' % (id, e))
            raise
        return {
            'message': '更新成功'
        }


class PictorialFeedlListView(APIView):
    def get(self, request):
        order_by = request.GET.get('order_by', "-id")
        offset = int(request.GET.get('offset', 1))
        limit = int(request.GET.get('limit', 10))

        try:
            data = self.rpc['venus/sun/pictorial/feed/list'](offset=(offset - 1) * limit, limit=limit,
                                                             order_by=order_by).unwrap()
        except Exception as e:
            error_logger.error(u'获取画报列表失败%s' , e)
            raise
        return data


class PictorialFeedlRank(APIView):
    """修改画报首页like流rank"""

    def post(self, request):
        id_ = request.POST.get('id')
        rank = int(request.POST.get('rank'))

        try:
            self.rpc['venus/sun/pictorial/feed/rank'](id_=id_, rank=rank).unwrap()
        except Exception as e:
            error_logger.error(u'编辑%信息失败%s' % (e))
            raise
        return {
            'message': '更新成功'
        }


class PictorialFeedDelete(APIView):
    """删除画报首页like流"""

    def post(self, request):
        ids = json.loads(request.POST.get('ids', '[]'))

        try:
            self.rpc['venus/sun/pictorial/feed/delete'](ids=ids).unwrap()
        except Exception as e:
            error_logger.error(u'删除信息失败%s' % (e))
            raise
        return {
            'message': '删除成功'
        }


class PictorialTopicList(APIView):
    """获取榜单帖子列表"""

    def get(self, request):
        id_ = request.GET.get('id')
        offset = int(request.GET.get('page', 1))
        limit = int(request.GET.get('count', 10))

        try:
            data = self.rpc['venus/sun/pictorial/topic/list'](id_=id_, offset=(offset-1)*limit, limit=limit).unwrap()
        except Exception as e:
            error_logger.error(u'获取信息失败%s' % (e))
            raise
        return data


class PictorialTopicSetRank(APIView):
    """设置榜单中帖子的优先级"""

    def post(self, request):
        pictorial_id = request.POST.get('pictorial_id')
        topic_id = request.POST.get('topic_id')
        rank = request.POST.get('rank')
        try:
            self.rpc['venus/sun/pictorial/topic/set_rank'](pictorial_id=pictorial_id, topic_id=topic_id, rank=rank).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '操作成功'
        }


class PictorialTopicDel(APIView):
    """删除榜单中的帖子"""

    def post(self, request):
        pictorial_id = request.POST.get('pictorial_id')
        topic_id = request.POST.get('topic_id')
        try:
            self.rpc['venus/sun/pictorial/topic/del'](pictorial_id=pictorial_id, topic_id=topic_id).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '删除成功'
        }


class PictorialFollowsDel(APIView):
    """删除榜单中的关注者"""

    def post(self, request):
        pictorial_id = int(request.POST.get('pictorial_id', 0))
        user_ids = json.loads(request.POST.get('user_ids', '[]'))
        user_ids = [int(item) for item in user_ids]
        try:
            self.rpc['venus/sun/pictorial/follows/del'](pictorial_id=pictorial_id, user_ids=user_ids).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '删除成功'
        }


class PictorialFollowsAdd(APIView):
    """新增榜单中的关注者"""

    def post(self, request):
        pictorial_id = int(request.POST.get('pictorial_id', 0))
        user_ids = json.loads(request.POST.get('user_ids', '[]'))
        user_ids = [int(item) for item in user_ids]
        try:
            self.rpc['venus/sun/pictorial/follows/add'](pictorial_id=pictorial_id, user_ids=user_ids).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '添加成功'
        }


class PictorialTagAdd(APIView):
    """新增榜单tag"""

    def post(self, request):
        pictorial_ids = json.loads(request.POST.get('pictorial_ids', '[]'))
        tag_id = int(request.POST.get('tag_id')) if request.POST.get('tag_id') else None

        try:
            self.rpc['venus/sun/pictorial/add_tag'](pictorial_ids=pictorial_ids, tag_id=tag_id).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '添加成功'
        }


class PictorialTagRm(APIView):
    """删除榜单tag"""

    def post(self, request):
        pictorial_ids = json.loads(request.POST.get('pictorial_ids', '[]'))
        tag_id = int(request.POST.get('tag_id')) if request.POST.get('tag_id') else None

        try:
            self.rpc['venus/sun/pictorial/rm_tag'](pictorial_ids=pictorial_ids, tag_id=tag_id).unwrap()
        except Exception as e:
            error_logger.error(u'操作失败%s' % (e))
            raise
        return {
            'message': '添加成功'
        }
