import os
import pandas as pd
import pprint as pp

from unify_api.modules.shidianu.procedures.power_param import power_p
from unify_api.modules.shidianu.service.IntergratePipe import SDU_DIR


async def params_mining(date_time_list, sid, sn):
    """数据预处理脚本,生成pa100-pa3000"""
    time_intevels_pa = {
        "00:01": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "01:02": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "02:03": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "03:04": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "04:05": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "05:06": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "06:07": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "07:08": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "08:09": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "09:10": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "10:11": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "11:12": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "12:13": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "13:14": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "14:15": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "15:16": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "16:17": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "17:18": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "18:19": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "19:20": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "20:21": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "21:22": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "22:23": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0},
        "23:24": {0: 0, 100: 0, 200: 0, 300: 0, 400: 0, 500: 0, 600: 0, 700: 0,
                  800: 0, 900: 0, 1000: 0, 1100: 0,
                  1200: 0,
                  1300: 0, 1400: 0, 1500: 0, 1600: 0, 1700: 0, 1800: 0,
                  1900: 0, 2000: 0, 2100: 0, 2200: 0, 2300: 0,
                  2400: 0, 2500: 0, 2600: 0, 2700: 0, 2800: 0, 2900: 0,
                  3000: 0}
    }
    dataDict = {"time": [], "pa_100": [], "pa_200": [], "pa_300": [],
                "pa_400": [], "pa_500": [], "pa_600": [], "pa_700": [],
                "pa_800": [], "pa_900": [], "pa_1000": [], "pa_1100": [],
                "pa_1200": [], "pa_1300": [], "pa_1400": [], "pa_1500": [],
                "pa_1600": [], "pa_1700": [], "pa_1800": [], "pa_1900": [],
                "pa_2000": [], "pa_2100": [], "pa_2200": [], "pa_2300": [],
                "pa_2400": [], "pa_2500": [], "pa_2600": [], "pa_2700": [],
                "pa_2800": [], "pa_2900": [], "pa_3000": []}
    for key, date_time in enumerate(date_time_list):
        # 1. 从数据获取这天的功率数据,转换成dateframe:eachdata
        p_list, each_data_list = await power_p(sid, sn, date_time)
        eachdata = pd.DataFrame(each_data_list, columns=['time', 'p', 'i'])
        day_time_all = eachdata["time"].values
        power_pa = eachdata["p"].values
        # power_pb = eachdata["pb"].values
        # power_pc = eachdata["pc"].values
        day_time_all = [
            pd.to_datetime(day_time_all[i], format='%Y-%m-%d %H:%M:%S') for
            i in range(len(day_time_all))]
        power_pa_Series = pd.Series(power_pa, index=day_time_all)
        power_pa_Series = power_pa_Series.interpolate(method='nearest')
        # power_pb_Series = pd.Series(power_pb, index=day_time_all)
        # power_pc_Series = pd.Series(power_pc, index=day_time_all)

        power_pa_Series_diff = power_pa_Series.diff(1)[1:]
        # power_pb_Series_diff = power_pb_Series.diff(1)
        # power_pc_Series_diff = power_pc_Series.diff(1)
        power_Series_diff_index = power_pa_Series_diff.index
        power_pa_count = [[str(power_Series_diff_index[each]).split(" ")[
                               1][:2] + ":0" + str(
            int(str(power_Series_diff_index[each]).split(" ")[1][:2]) + 1),
                           int(1000 * power_pa_Series_diff[
                               each]) // 100 * 100] if int(
            str(power_Series_diff_index[each]).split(" ")[1][
            :2]) <= 8 else [
            str(power_Series_diff_index[each]).split(" ")[1][
            :2] + ":" + str(
                int(str(power_Series_diff_index[each]).split(" ")[1][
                    :2]) + 1),
            int(1000 * power_pa_Series_diff[each]) // 100 * 100] for each
                          in range(1, len(power_pa_Series_diff)) if
                          int(1000 * power_pa_Series_diff[each]) > 0]

        power_pa_count_str = [str(each) for each in power_pa_count]
        power_pa_set = set(power_pa_count_str)
        for each in power_pa_set:
            each1 = eval(each)
            time_intevels_pa[each1[0]][
                each1[1]] = power_pa_count_str.count(each)

        pa_100 = [time_intevels_pa[key][100] for key in
                  time_intevels_pa.keys()]
        pa_200 = [time_intevels_pa[key][200] for key in
                  time_intevels_pa.keys()]
        pa_300 = [time_intevels_pa[key][300] for key in
                  time_intevels_pa.keys()]
        pa_400 = [time_intevels_pa[key][400] for key in
                  time_intevels_pa.keys()]
        pa_500 = [time_intevels_pa[key][500] for key in
                  time_intevels_pa.keys()]
        pa_600 = [time_intevels_pa[key][600] for key in
                  time_intevels_pa.keys()]
        pa_700 = [time_intevels_pa[key][700] for key in
                  time_intevels_pa.keys()]
        pa_800 = [time_intevels_pa[key][800] for key in
                  time_intevels_pa.keys()]
        pa_900 = [time_intevels_pa[key][900] for key in
                  time_intevels_pa.keys()]
        pa_1000 = [time_intevels_pa[key][1000] for key in
                   time_intevels_pa.keys()]
        pa_1100 = [time_intevels_pa[key][1100] for key in
                   time_intevels_pa.keys()]
        pa_1200 = [time_intevels_pa[key][1200] for key in
                   time_intevels_pa.keys()]
        pa_1300 = [time_intevels_pa[key][1300] for key in
                   time_intevels_pa.keys()]
        pa_1400 = [time_intevels_pa[key][1400] for key in
                   time_intevels_pa.keys()]
        pa_1500 = [time_intevels_pa[key][1500] for key in
                   time_intevels_pa.keys()]
        pa_1600 = [time_intevels_pa[key][1600] for key in
                   time_intevels_pa.keys()]
        pa_1700 = [time_intevels_pa[key][1700] for key in
                   time_intevels_pa.keys()]
        pa_1800 = [time_intevels_pa[key][1800] for key in
                   time_intevels_pa.keys()]
        pa_1900 = [time_intevels_pa[key][1900] for key in
                   time_intevels_pa.keys()]
        pa_2000 = [time_intevels_pa[key][2000] for key in
                   time_intevels_pa.keys()]
        pa_2100 = [time_intevels_pa[key][2100] for key in
                   time_intevels_pa.keys()]
        pa_2200 = [time_intevels_pa[key][2200] for key in
                   time_intevels_pa.keys()]
        pa_2300 = [time_intevels_pa[key][2300] for key in
                   time_intevels_pa.keys()]
        pa_2400 = [time_intevels_pa[key][2400] for key in
                   time_intevels_pa.keys()]
        pa_2500 = [time_intevels_pa[key][2500] for key in
                   time_intevels_pa.keys()]
        pa_2600 = [time_intevels_pa[key][2600] for key in
                   time_intevels_pa.keys()]
        pa_2700 = [time_intevels_pa[key][2700] for key in
                   time_intevels_pa.keys()]
        pa_2800 = [time_intevels_pa[key][2800] for key in
                   time_intevels_pa.keys()]
        pa_2900 = [time_intevels_pa[key][2900] for key in
                   time_intevels_pa.keys()]
        pa_3000 = [time_intevels_pa[key][3000] for key in
                   time_intevels_pa.keys()]

        keys = list(time_intevels_pa.keys())

        dataDict['time'] = keys
        dataDict['pa_100'] = pa_100
        dataDict['pa_200'] = pa_200
        dataDict['pa_300'] = pa_300
        dataDict['pa_400'] = pa_400
        dataDict['pa_500'] = pa_500
        dataDict['pa_600'] = pa_600
        dataDict['pa_700'] = pa_700
        dataDict['pa_800'] = pa_800
        dataDict['pa_900'] = pa_900
        dataDict['pa_1000'] = pa_1000
        dataDict['pa_1100'] = pa_1100
        dataDict['pa_1200'] = pa_1200
        dataDict['pa_1300'] = pa_1300
        dataDict['pa_1400'] = pa_1400
        dataDict['pa_1500'] = pa_1500
        dataDict['pa_1600'] = pa_1600
        dataDict['pa_1700'] = pa_1700
        dataDict['pa_1800'] = pa_1800
        dataDict['pa_1900'] = pa_1900
        dataDict['pa_2000'] = pa_2000
        dataDict['pa_2100'] = pa_2100
        dataDict['pa_2200'] = pa_2200
        dataDict['pa_2300'] = pa_2300
        dataDict['pa_2400'] = pa_2400
        dataDict['pa_2500'] = pa_2500
        dataDict['pa_2600'] = pa_2600
        dataDict['pa_2700'] = pa_2700
        dataDict['pa_2800'] = pa_2800
        dataDict['pa_2900'] = pa_2900
        dataDict['pa_3000'] = pa_3000
        if key == 0:
            result = pd.DataFrame(dataDict)
        else:
            result = result.append(pd.DataFrame(dataDict))
        # result.append(pd.DataFrame(dataDict))
    return result


def paramAnalysis(hisdata):
    """生成节点参数
        保存在:E:\projects\powerDecomp\params
    """
    electroFuran_hold = 0
    riceCook_hold = 0
    heater_hold = 0
    # hisdata = params_mining(dateCur=dateCur, daysLen=daysLen, sid="sid", node="a")
    powerGradeList = ["pa_100", "pa_200", "pa_300", "pa_400", "pa_500",
                      "pa_600", "pa_700", "pa_800", "pa_900", "pa_1000",
                      "pa_1100", "pa_1200", "pa_1300", "pa_1400", "pa_1500",
                      "pa_1600", "pa_1700", "pa_1800", "pa_1900",
                      "pa_2000", "pa_2100", "pa_2200", "pa_2300", "pa_2400",
                      "pa_2500", "pa_2600", "pa_2700", "pa_2800",
                      "pa_2900", "pa_3000"]

    total_day = len(hisdata)
    eachpowgradeData = hisdata[powerGradeList].sum()
    sum_val = list(eachpowgradeData)
    eachday_count = max(sum_val) / total_day

    output = "refrig_hold" + "," + "airCond_hold" + "," + "heater_hold" + "," + "riceCook_hold" + "," + "electroFuran_hold"
    if eachday_count // 24 > 0.3:
        refrig_hold = int(
            powerGradeList[sum_val.index(max(sum_val))].split("_")[1])
        sum_val[sum_val.index(max(sum_val))] = 0
        eachday_count = max(sum_val) / total_day
        if eachday_count / 24 > 0.2:
            airCond_hold = int(
                powerGradeList[sum_val.index(max(sum_val))].split("_")[1])
            sum_val[sum_val.index(max(sum_val))] = 0
            day_aver = [each / total_day for each in sum_val]
            for i in range(1, len(sum_val) - 3):
                if sum(day_aver[i:i + 3]) > 0.5 and sum(
                        day_aver[i:i + 3]) < 2 and i > 8:
                    heater_hold = int(powerGradeList[i].split("_")[1])
                    break
            for i in range(1, len(sum_val) - 3):
                if sum(day_aver[i:i + 3]) > 2 and i > 8 and i < 12:
                    riceCook_hold = int(powerGradeList[i].split("_")[1])
                    break
            for i in range(1, len(sum_val) - 3):
                if sum(day_aver[i:i + 3]) > 2 and i >= 12:
                    electroFuran_hold = int(
                        powerGradeList[i].split("_")[1])
                    break
            output = str(refrig_hold) + "," + str(airCond_hold) + "," + str(
                heater_hold) + "," + str(riceCook_hold) + "," + str(
                electroFuran_hold)
            # wf.write(output + "\n")
    if "0" not in output and "1" not in output:
        return "100,300,1200,1000,1300,1"
    else:
        return output + "," + "0"