from handlers.HandlerBase import BaseHandler
from data_manage.public_analysis import *
import time
import json
from model.DateUtils import DateUtils

log = logger()


class BookRank(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            arg = self.get_args()
            print(arg)
            start = arg.get("start", self.thisday)
            end = arg.get("end", self.thisday)
            book = arg.get("book")
            stage = arg.get("stage")
            type = arg.get("type")
            page = arg.get("page", 1)
            page_size = arg.get("page_size", 30)
            order_by = arg.get("order_by", 'cost')
            order = arg.get("order", 'desc')
            data, total = book_rank(start, end, book, stage, type, page, page_size, order_by, order)
            self.write_json(data=data, total=total)


class BookTrend(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            arg = self.get_args()
            print(arg)
            start = arg.get("start", self.get_n_days(-29))
            end = arg.get("end", )
            date_range = arg.get("date_range")
            book = arg.get("book")
            book_type = arg.get("type")
            platform = arg.get("platform")
            page = arg.get("page", 1)
            page_size = arg.get("page_size", 30)
            order_by = arg.get("order_by", 'dt')
            order = arg.get("order", 'desc')
            if date_range:
                end = self.get_n_days(0)
                start = self.get_n_days(-int(date_range) + 1)
            data, total, total_data = book_trend(start, end, book, book_type, platform, page, page_size, order_by,
                                                 order)
            self.write_json(data=data, total=total, total_data=total_data)


class BookOverview(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            arg = self.get_args()
            print(arg)
            start = arg.get("start")
            end = arg.get("end", )
            book = arg.get("book")
            type = arg.get("type")
            page = arg.get("page")
            date_range = arg.get("date_range")
            page_size = arg.get("page_size")
            order_by = arg.get("order_by", 'cost')
            order = arg.get("order", 'desc')
            if date_range:
                end = self.get_n_days(0)
                start = self.get_n_days(-int(date_range) + 1)
            data, total = book_overview(start, end, book, type, page, page_size, order_by, order)
            if arg.get("download"):
                self.write_download(str(int(time.time())), data)
            self.write_json(data=data, total=total)


class PitcherOverview(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            arg = self.get_args()
            print(arg)
            user_id = arg.get('user_id')
            if user_id:
                start = arg.get("start")
                end = arg.get("end")
                page = arg.get("page")
                page_size = arg.get("page_size")
                order_by = arg.get("order_by", 'cost')
                order = arg.get("order", 'desc')
                pitcher = arg.get("pitcher")

                data, total = pitcher_overview(user_id, start, end, pitcher, page, page_size, order_by, order)
                if arg.get("download"):
                    self.write_download(str(int(time.time())), data)
                self.write_json(data=data, total=total)
            else:
                self.write_fail(msg='user_id not found')


class BossPanelSummary(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:

            arg = self.get_args()
            print(arg)
            user_id = arg.get("user_id")
            start = arg.get("start", self.get_n_days(-30))
            end = arg.get("end")
            page = arg.get("page")
            page_size = arg.get("page_size")
            order_by = arg.get("order_by", 'dt')
            order = arg.get("order", 'desc')
            pitcher = arg.get("pitcher")
            type = arg.get("type")
            stage = arg.get("stage")
            channel = arg.get("channel")

            download = arg.get("download")
            data, total = boss_panel_summary(user_id, start, end, channel, pitcher, type,
                                             stage, page, page_size, order_by, order)
            if download:
                self.write_download(str(int(time.time())), data)
            self.write_json(data=data, total=total)


class ImageRank(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            arg = self.get_args()
            start = arg.get("start")
            end = arg.get("end")
            page = arg.get("page", 1)
            page_size = arg.get("page_size", 10)
            order_by = arg.get("order_by", 'cost')
            order = arg.get("order", 'desc')
            type = arg.get("type")
            book = arg.get('book')
            data, total = image_rank(start, end, type, book, page, page_size, order_by, order)
            self.write_json(data=data, total=total)


"""素材排行榜"""


class AdvertisementRank(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            du = DateUtils()
            arg = self.get_args()
            show_type = arg.get('show_type', 'public')  # 展示 public private,默认public----public 会展示大于5000以上的数据,超过5天的数据
            user_id = arg.get('user_id')
            start = arg.get("start", du.getNow())
            end = arg.get("end")
            page = arg.get("page", 1)
            page_size = arg.get("page_size")
            order_by = arg.get("order_by", 'cost')
            order = arg.get("order", 'desc')
            type = arg.get("type")
            book = arg.get("book")
            channel = arg.get('channel')
            pitcher = arg.get('pitcher')
            has_order = arg.get("has_order")
            is_video = arg.get('is_video')
            data, total, total_data = advertisement_rank(user_id, start, end, type, page, page_size, order, order_by,
                                                         book, channel, pitcher, has_order, is_video, show_type)
            self.write_json(data=data, total=total, total_data=total_data)


"""素材创意"""


class AdvertisementIdea(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:

            du = DateUtils()
            arg = self.get_args()
            data_type = arg.get('dataType', 'all') if arg.get('dataType',
                                                              'all') is not None else 'all'  # 数据是否是个人,个人是private,共有是all
            channel = arg.get('channel')  # 渠道-----朋友圈信息流,抖音,广点通等等,,,,,,选项朋友圈信息流,公众平台流量,先#TODO:先暂时放置
            page = arg.get('pageNum', 1) if arg.get('pageNUm', 1) is not None else 1
            page_size = arg.get('pageSize', 20) if arg.get('pageSize', 20) is not None else 20
            order = 'desc' if arg.get('upOrder') else 'asc'  #
            order_by = arg.get('sortRule')  # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
            start = arg.get('beginDate', du.getNow()) if arg.get('beginDate', du.getNow()) is not None else du.getNow()
            end = arg.get('endDate')
            book = arg.get('novels')
            is_video = arg.get('type')
            is_singleimg = arg.get('singleImg', True) if arg.get('singleImg',
                                                                 True) is not None else True  # 是否是组图-----默认是没有
            user_id = arg.get('userId')
            campaign_ids = arg.get('campaignIds')

            data = idea_rank(user_id, start, end, page, page_size, order, order_by,
                             book, channel, is_singleimg, is_video, data_type, campaign_ids)
            self.write_json_tmp_java(data=data)


class AdvertisementMedia(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:

            du = DateUtils()
            arg = self.get_args()
            data_type = arg.get('dataType', 'all') if arg.get('dataType',
                                                              'all') is not None else 'all'  # 数据是否是个人,个人是private,共有是all
            channel = arg.get('channel')  # 渠道-----朋友圈信息流,抖音,广点通等等,,,,,,选项朋友圈信息流,公众平台流量,先#TODO:先暂时放置
            page = arg.get('pageNum', 1) if arg.get('pageNUm', 1) is not None else 1
            page_size = arg.get('pageSize', 20) if arg.get('pageSize', 20) is not None else 20
            order = 'desc' if arg.get('upOrder') else 'asc'  #
            order_by = arg.get('sortRule')  # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
            start = arg.get('beginDate', du.getNow()) if arg.get('beginDate', du.getNow()) is not None else du.getNow()
            end = arg.get('endDate')
            book = arg.get('novels')
            is_video = arg.get('type')
            is_singleimg = arg.get('singleImg', True) if arg.get('singleImg',
                                                                 True) is not None else True  # 是否是组图-----默认是没有
            user_id = arg.get('userId')
            campaign_ids = arg.get('campaignIds')

            data = media_rank(user_id, start, end, page, page_size, order, order_by,
                              book, channel, is_singleimg, is_video, data_type, campaign_ids)
            self.write_json_tmp_java(data=data)


class AdvertisementContent(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            du = DateUtils()
            arg = self.get_args()
            data_type = arg.get('dataType', 'all') if arg.get('dataType',
                                                              'all') is not None else 'all'  # 数据是否是个人,个人是private,共有是all
            channel = arg.get('channel')  # 渠道-----朋友圈信息流,抖音,广点通等等,,,,,,选项朋友圈信息流,公众平台流量,先#TODO:先暂时放置
            page = arg.get('pageNum', 1) if arg.get('pageNUm', 1) is not None else 1
            page_size = arg.get('pageSize', 20) if arg.get('pageSize', 20) is not None else 20
            order = 'desc' if arg.get('upOrder') else 'asc'  #
            order_by = arg.get('sortRule')  # clicktimes,view_times,consume_amount,click_rate---------数据进行一一对应
            start = arg.get('beginDate', du.getNow()) if arg.get('beginDate', du.getNow()) is not None else du.getNow()
            end = arg.get('endDate')
            book = arg.get('novels')
            user_id = arg.get('userId')
            content = arg.get('content')
            type = arg.get('type')
            campaign_ids = arg.get('campaignIds')

            data = content_rank(user_id, start, end, page, page_size, order, order_by,
                                book, channel, data_type, content, type, campaign_ids)
            self.write_json_tmp_java(data=data)