#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "chenwei"
# Date: 2018/11/17

from utils.base import APIView, get_offset_count


class CountrySearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        try:
            data = self.rpc['venus/sun/country/search'](name=name).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class UserSearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        offset, count = get_offset_count(request)
        try:
            data = self.rpc['venus/sun/user/search'](name=name, offset=offset, count=count).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class TagSearchView(APIView):
    def get(self, request):
        offset, count = get_offset_count(request)
        name = request.GET.get('name')
        platform = None  # request.GET.get('platform')
        collection = request.GET.get('collection')
        try:
            data = self.rpc['venus/sun/tag/search'](offset=offset, count=count, name=name, platform=platform, collection=collection).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class CelebritySearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        try:
            data = self.rpc['venus/sun/celebrity/search'](name=name).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class CitySearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        try:
            data = self.rpc['venus/sun/city/search'](name=name).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class TopicSearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        try:
            data = self.rpc['venus/sun/topic/search'](name=name).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class TagTypeSearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        try:
            data = self.rpc['venus/sun/tag/tagtype_search'](name=name).unwrap()
        except Exception as e:
            raise e
        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class PictorialSearchView(APIView):
    def get(self, request):
        name = request.GET.get('name')
        tag_id = request.GET.get('tag_id')
        offset, count = get_offset_count(request)

        try:
            data = self.rpc['venus/sun/pictorial/search'](name=name, tag_id=tag_id, offset=offset, count=count).unwrap()
        except Exception as e:
            raise e

        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }


class PictorialActivitySearchView(APIView):
    def get(self, request):

        name = request.GET.get('name')
        offset, count = get_offset_count(request)

        try:
            data = self.rpc['venus/sun/activity/pictorial/search'](name=name, offset=offset, count=count).unwrap()
        except Exception as e:
            raise e

        return {
            'data': ['{id}:{name}'.format(id=search_data['id'], name=search_data['name']) for search_data in data]
        }