from handlers.HandlerBase import BaseHandler
from model.log import logger
from data_manage.pitcher_panel import *
import time
import pandas as pd
import json
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):
        du =DateUtils()
        if not self._au:
            self.write_fail(msg='auth error')
        else:
            args=self.get_args()
            print(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", 1)
            page_size = args.get("page_size", 10)
            order_by = args.get("order_by", 'date')
            order = args.get("order", 'desc')
            data,total,total_data =get_channel_overview(user_id,channel,pitcher,stage,start,end,page,page_size,order_by,order)
            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.thisday)
            end = arg.get("end")
            page = arg.get("page", 1)
            page_size = arg.get("page_size", 10)
            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)
            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",self.get_n_days(-7))
            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 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')