from handlers.HandlerBase import BaseHandler
from data_manage.pitcher_panel import *
import time
from data_manage.operate import get_user_name_by_id

log = logger()


class PitcherPanelChannel(BaseHandler):

    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            print(args)
            pitcher = args.get("pitcher")
            channel = args.get("channel")
            start = args.get("start", self.get_n_days(0))
            end = args.get("end", self.get_n_days(0))
            page = args.get("page")
            page_size = args.get("page_size")
            order_by = args.get("order_by", 'cost')
            order = args.get("order", 'desc')
            data_range = args.get('date_range')
            if data_range:
                end = self.get_n_days(0)
                start = self.get_n_days(-int(args['date_range']) + 1)
            data, total = get_pitcher_panel_channel(pitcher, channel, start, end, page, page_size, order_by, order)
            self.write_json(data=data, total=total)


class PitcherPanelDaily(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            print(args)
            user_id = args.get('user_id')
            pitcher = args.get("pitcher", get_user_name_by_id(user_id))
            start = args.get("start", self.get_n_days(-7))
            end = args.get("end")
            page = args.get("page")
            page_size = args.get("page_size")
            order_by = args.get("order_by", 'date')
            order = args.get("order", 'desc')

            data, total, total_data = get_pitcher_panel_daily(pitcher, start, end, page, page_size, order_by, order)
            self.write_json(data=data, total=total, total_data=total_data)


class PitcherPanelOverview(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            user_id = args.get("user_id")
            pitcher = args.get("pitcher", get_user_name_by_id(user_id))
            data = get_pitcher_panel_overview(pitcher)
            self.write_json(data)


class ChannelOverview(BaseHandler):
    def post(self):

        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            user_id = args.get('user_id')
            channel = args.get("channel")
            pitcher = args.get("pitcher")
            start = args.get("start", self.thisday)
            end = args.get("end")
            stage = args.get("stage")
            page = args.get("page")
            book = args.get('book')
            page_size = args.get("page_size")
            order_by = args.get("order_by", 'date')
            order = args.get("order", 'desc')
            data, total, total_data = get_channel_overview(user_id, channel, pitcher, stage, book, start, end, page,
                                                           page_size, order_by, order)
            if args.get("download"):
                self.write_download(str(int(time.time())), data)
            else:
                self.write_json(data=data, total=total, total_data=total_data)


class ChannelAgainOrderTrend(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            print(args)
            channel = args.get("channel")
            date = args.get("date", self.get_n_days(-8))
            if channel:
                data = get_channel_again_order_trend(channel, date)
                self.write_json(data)
            else:
                self.write_json([])


class ChannelActive(BaseHandler):
    def post(self):
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args = self.get_args()
            print(args)
            user_id = args.get('user_id')
            pitcher = args.get("pitcher")
            channel = args.get("channel")
            start = args.get("start", self.thisday)
            end = args.get("end")
            page = args.get("page", 1)
            page_size = args.get("page_size", 10)
            order_by = args.get("order_by", 'date')
            order = args.get("order", 'desc')

            data, total = get_channel_active(user_id, channel, pitcher, start, end, page, page_size, order_by, order)
            self.write_json(data=data, total=total)


class ChannelOrderTrend(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')
            pitcher = arg.get("pitcher")
            channel = arg.get("channel")
            start = arg.get("start", self.get_n_days(-30)) if channel else arg.get("start", self.thisday)
            end = arg.get("end")
            page = arg.get("page")
            page_size = arg.get("page_size")
            order_by = arg.get("order_by", 'date')
            order = arg.get("order", 'desc')
            data, total, total_data = get_channel_order_trend(user_id, channel, pitcher, start, end, page, page_size,
                                                              order_by, order)
            if arg.get("download"):
                self.write_download("channelTrend_" + str(int(time.time())), data)
            else:
                self.write_json(data=data, total=total, total_data=total_data)


class ChannelSummary(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')
            channel = arg.get('channel')
            pitcher = arg.get('pitcher')
            page = arg.get("page")
            page_size = arg.get("page_size")
            location = arg.get('location')
            order_by = arg.get("order_by", 'total_cost')
            order = arg.get("order", 'desc')
            state = arg.get("state")
            start = arg.get("start")
            end = arg.get("end")
            data, total, total_data = get_channel_summary(user_id, channel, pitcher, page, page_size, order_by, order,
                                                          state, location, start, end)
            if arg.get("download"):
                self.write_download("channel_" + str(int(time.time())), data)
            else:
                self.write_json(data=data, total=total, total_data=total_data)


class ChannelPitcherSummary(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')
            channel = arg.get('channel')
            pitcher = arg.get('pitcher')
            page = arg.get("page")
            page_size = arg.get("page_size")
            location = arg.get('location')
            order_by = arg.get("order_by", 'total_cost')
            order = arg.get("order", 'desc')
            state = arg.get("state")
            start = arg.get("start")
            end = arg.get("end")
            data, total, total_data = get_pitcher_channel_summary(user_id, channel, pitcher, page, page_size, order_by,
                                                                  order, state, location, start, end)
            if arg.get("download"):
                self.write_download("channel_" + str(int(time.time())), data)
            else:
                self.write_json(data=data, total=total, total_data=total_data)


class PitcherTrend(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:
                pitcher = arg.get('pitcher', get_user_name_by_id(user_id))
                start = arg.get("start", self.thisday)
                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')

                data, total, total_data = get_pitcher_trend(pitcher, start, end, page, page_size, order_by, order)
                self.write_json(data=data, total=total, total_data=total_data)
            else:
                self.write_fail(msg='user_id not found')