from handlers.HandlerBase import BaseHandler
from model.log import logger
from data_manage.public_analysis import *
import time
from model.DateUtils import DateUtils
from data_manage.operate import get_user_name_by_id

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_fial(msg='auth error')
        else:
            du = DateUtils()
            arg = self.get_args()
            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)
            self.write_json(data=data, total=total, total_data=total_data)