# coding:utf-8

import requests
from deco import register


class AwemeSDK:

    def __init__(self, token, host):
        self.host = 'http://{host}'.format(host=host.rstrip('/'))
        self.route_path = self.host + '/douyin/tool/routes'
        self.token = token
        self.__initialize__()

    def __initialize__(self):
        data: dict = requests.get(self.route_path, params={'token': self.token}).json()
        self.routes = data.get('routes')

    @register('UserInfo')
    def get_user_info(self, uid):
        '''
        获取用户信息，详细版本
        :param uid:用户user id,例如：'104255897823'
        '''
        return {
            'uid': uid
        }

    @register('UserDetail')
    def get_user_detail(self, uid):
        '''
        获取用户信息，精简版本
        :param uid:用户sec_user_id，例如：'MS4wLjABAAAA8U_l6rBzmy7bcy6xOJel4v0RzoR_wfAubGPeJimN__4'
        '''
        return {
            'uid': uid
        }

    @register('UserLiveInfo')
    def get_user_live_info(self, uid):
        '''
        获取用户直播信息
        :param uid: 用户user id,例如：'104255897823'
        '''
        return {
            'uid': uid
        }

    @register('UserLiveStatus')
    def get_user_live_status(self, uid):
        '''
        查询用户是否开播，获取开播的直播间room_id
        :param uid: 用户user id,例如：'104255897823'
        '''
        return {
            'uid': uid
        }

    @register('UserVideos')
    def get_user_videos(self, uid, cursor=0):
        '''
        获取用户发布的视频作品
        :param uid: 用户user id,例如：'104255897823'
        :param cursor: 翻页游标，根据返回结果的max_cursor进行翻页操作，初始值为0, max_cursor为下一页，min_cursor为上一页
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('UserFavourites')
    def get_user_favourites(self, uid, cursor=0):
        '''
        获取用户点赞过的视频列表,此用户的喜欢列表必须是可见的
        :param uid: 用户user id
        :param cursor: 翻页游标，根据返回结果的max_cursor进行翻页操作，初始值为0
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('UserMusic')
    def get_user_music(self, uid, cursor=0):
        '''
        获取用户音乐作品列表，此用户必须有音乐作品才有结果返回
        :param uid: 用户user id
        :param cursor: 翻页游标，根据返回结果的cursor进行翻页操作，初始值为0
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('UserPromotions')
    def get_user_promotions(self, uid, cursor=0):
        '''
        获取用户商品橱窗
        :param uid:用户user_id
        :param cursor:翻页游标，默认0,步长为20
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('UserFollowings')
    def get_user_followings(self, uid, cursor=0):
        '''
        获取用户关注列表
        :param uid:用户user id
        :param cursor:翻页游标，根据结果返回的min_time传入作为下一页翻页参数，初始为0
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('UserFollowers')
    def get_user_followers(self, uid, cursor=0):
        '''
        获取用户关注列表
        :param uid:用户user id
        :param cursor:翻页游标，根据结果返回的min_time传入作为下一页翻页参数，初始为0
        '''
        return {
            'uid': uid,
            'cursor': cursor,
        }

    @register('VideoComments')
    def get_video_comments(self, aweme_id, cursor=0):
        '''
        获取视频评论
        :param aweme_id:视频id,如：6849103450475711752
        :param cursor:翻页游标，根据结果返回的cursor传入作为下一页翻页参数，初始为0
        '''
        return {
            'aweme_id': aweme_id,
            'cursor': cursor,
        }

    @register('VideoDetail')
    def get_video_detail(self, aweme_id):
        '''
        获取视频详情，详细版本
        :param aweme_id:视频的id
        '''
        return {
            'aweme_id': aweme_id,
        }

    @register('VideoInfo')
    def get_video_info(self, aweme_id):
        '''
        获取视频详情，精简版本
        :param aweme_id:视频的id
        '''
        return {
            'aweme_id': aweme_id,
        }

    @register('VideoCommentsReply')
    def get_video_comment_replies(self, aweme_id, cid, cursor=0):
        '''
        获取视频评论的子评论
        :param aweme_id: 视频id
        :param cid: 评论id
        :param cursor: 子评论列表翻页游标，适用于子评论过多的情况下,根据结果返回的cursor传入作为下一页翻页参数，初始为0

        '''
        return {
            'aweme_id': aweme_id,
            'cid': cid,
            'cursor': cursor
        }

    @register('ChallengeDetail')
    def get_challenge_detail(self, challenge_id):
        '''
        获取话题（challenge）详情
        :param challenge_id:话题id
        '''
        return {
            'chid': challenge_id
        }

    @register('ChallengeVideos')
    def get_challenge_videos(self, challenge_id, cursor=0):
        '''
        获取话题（challenge）下的视频
        :param challenge_id:话题id
        :param cursor:翻页游标，根据结果返回的cursor进行翻页操作，初始值为0
        '''
        return {
            'chid': challenge_id,
            'cursor': cursor,
        }

    @register('PoiDetail')
    def get_poi_detail(self, poi_id):
        '''
        获取地点（poi）详情
        :param poi_id: 地点id
        '''
        return {
            'poi_id': poi_id
        }

    @register('PoiVideos')
    def get_poi_videos(self, poi_id, cursor=0):
        '''
        获取地点（poi）下的视频
        :param poi_id: 地点id
        :param cursor: 翻页游标，根据结果返回的cursor进行翻页操作，初始值为0
        '''
        return {
            'poi_id': poi_id,
            'cursor': cursor
        }

    @register('MixDetail')
    def get_mix_detail(self, mix_id):
        '''
        获取合集的信息
        :param mix_id: 合集id
        '''
        return {
            'mix_id': mix_id,
        }

    @register('MixVideos')
    def get_mix_videos(self, mix_id, cursor=0):
        '''
        获取合集（mix）下的视频
        :param mix_id:合集id
        :param cursor:翻页游标，根据结果返回的cursor进行翻页操作，初始值为0
        '''
        return {
            'mix_id': mix_id,
            'cursor': cursor,
        }

    @register('TagVideos')
    def get_tag_videos(self, tag, cursor=0):
        '''
        获取带有标签的视频
        :param tag:标签文字,如：奥运
        :param cursor:翻页游标，根据结果返回的cursor进行翻页操作，初始值为0
        '''
        return {
            'tag': tag,
            'cursor': cursor,
        }

    @register('PromotionInfo')
    def get_promotion_info(self, promotion_id):
        '''
        获取某样带货商品的信息,精简版本
        :param promotion_id: 商品id
        '''
        return {
            'pid': promotion_id,
        }

    @register('PromotionDetail')
    def get_promotion_detail(self, promotion_id):
        '''
        获取某样带货商品的信息,详细版本，有销量具体数据,维护中
        :param promotion_id: 商品id
        '''
        return {
            'pid': promotion_id,
        }

    @register('LiveRoomChat')
    def get_liveroom_chat(self, room_id):
        '''
        获取抖音直播间弹幕/进入直播间观众/刷礼物/关注主播 信息
        :param room_id:直播间id
        '''
        return {
            'room_id': room_id
        }

    @register('LiveRoomChat_V2')
    def get_liveroom_chat_v2(self, room_id):
        '''
        获取抖音直播间弹幕/进入直播间观众/刷礼物/关注主播 信息
        :param room_id:直播间id
        '''
        return {
            'room_id': room_id
        }

    @register('LiveRoomPromotions')
    def get_liveroom_promotions(self, room_id):
        '''
        获取抖音直播间带货商品信息
        :param room_id:直播间id
        '''
        return {
            'room_id': room_id
        }

    @register('LiveRoomInfo')
    def get_liveroom_info(self, room_id):
        '''
        获取抖音直播间信息
        :param room_id:直播间id
        '''
        return {
            'room_id': room_id
        }

    @register('LiveRoomStatus')
    def get_liveroom_status(self, room_id):
        '''
        查询直播间是否开播
        :param room_id:直播间id
        '''
        return {
            'room_ids': room_id
        }

    @register('LiveRoomAudience')
    def get_liveroom_audience(self, room_id):
        '''
        查询直播间在线观众，前200人
        :param room_id:直播间id
        '''
        return {
            'room_ids': room_id
        }

    @register('LiveRoomIntro')
    def get_liveroom_intro(self, room_id):
        '''
        查询直播间当前正在介绍的商品详情
        :param room_id:直播间id
        '''
        return {
            'room_ids': room_id
        }

    @register('LiveRoomFeed')
    def get_liveroom_feed(self):
        '''
        随机获取直播间
        '''
        return

    @register('BoardStar')
    def star_board(self):
        '''
        实时明星爱DOU榜
        '''
        return

    @register('BoardHot')
    def hot_board(self):
        '''
        实时热点榜
        '''
        return

    @register('BoardVideos')
    def hot_videos(self):
        '''
        最热视频榜单
        '''
        return

    @register('BoardEco')
    def eco_board(self):
        '''
        全站带货榜
        '''
        return

    @register('BoardWave')
    def wave_board(self):
        '''
        全站音浪榜
        '''
        return

    @register('BoardLive')
    def live_board(self):
        '''
        直播榜
        '''
        return

    @register('BoardMusicHot')
    def hot_music_board(self):
        '''
        音乐榜-热歌榜
        '''
        return

    @register('BoardMusicNewHit')
    def newhit_music_board(self):
        '''
        音乐榜-飙升榜
        '''
        return

    @register('BoardMusicOriginal')
    def original_music_board(self):
        '''
        音乐榜-原创榜
        '''
        return

    @register('BoardBrands')
    def brand_board(self, category_id, start_date=None):
        '''
        实时品牌榜
        :param category_id: 品牌类别id，可以从品牌类别接口获取，一次即可
        :param start_date:开始日期，可用于抓取历史榜单数据，默认空
        '''
        return {
            'cate_id': category_id,
            'start_date': start_date
        }

    @register('BoardBrandsCates')
    def brand_categories(self):
        '''
        品牌类别接口
        '''
        return

    @register('BoardBrandsDetail')
    def brand_detail(self, category_id, brand_id):
        '''
        热榜品牌详情
        :param category_id:品牌类别id，可以从品牌类别接口获取，一次即可
        :param brand_id:品牌id
        '''
        return {
            'cate_id': category_id,
            'brand_id': brand_id
        }

    @register('SearchUsers')
    def search_users(self, keyword, cursor=0):
        '''
        关键词搜索用户
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchVideos')
    def search_videos(self, keyword, cursor=0):
        '''
        关键词搜索视频
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchLives')
    def search_lives(self, keyword, cursor=0):
        '''
        关键词搜索直播
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchGoods')
    def search_goods(self, keyword, cursor=0):
        '''
        关键词搜索商品
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchChallenge')
    def search_challenges(self, keyword, cursor=0):
        '''
        关键词搜索话题
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchMusic')
    def search_music(self, keyword, cursor=0):
        '''
        关键词搜索音乐
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('SearchPoi')
    def search_poi(self, keyword, cursor=0):
        '''
        关键词搜索地点
        :param keyword:搜索关键词
        :param cursor:翻页游标，初始为0，根据返回的cursor值进行翻页
        '''
        return {
            'keyword': keyword,
            'cursor': cursor
        }

    @register('FeedHome')
    def home_feed(self):
        '''
        首页推荐
        '''
        return

    @register('ToolGetUid')
    def trans_uid(self, dy_id):
        '''
        用户抖音号转uid
        :param dy_id: 用户抖音号，如：Colorkey
        '''
        return {
            'dy_id': dy_id
        }
