'''
工具类

'''
__author__ = 'lmstack'


# import CONFIGURE.PathSetting as PathSetting
# import sys
# sys.path.append(PathSetting.backend_path)
from LIB.BACKEND import DBManager
# import DBManager
import pandas as pd
import numpy as np
import math
from numba import jit
import os
import datetime
import pdb
import warnings
warnings.filterwarnings('ignore')

class Tools():

    def __init__(self):
        pass

    # 数据下载
    def data_download(self, write_path='', sn='', start_time='', end_time='', data_groups=['bms', 'gps']):
        '''
        数据下载函数
        --------------输入参数------------
        write_path: 文件保存路径,不需要指定文件名
        sn: str, 电池sn号
        start_time: str, 开始时间
        end_time: str, 结束时间
        gps_switch: True:获取gps数据; False:不获取gps数据
        mode: 0:正常取数; 1:7255 取数

        --------------输出参数------------
        bms_data: 获取到的bms数据
        gps_data: 获取到的gps数据
        '''
        dbManager = DBManager.DBManager()
        print('downloading......')
        df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=data_groups)
        for data_group in data_groups:
            df_data[data_group].to_csv(os.path.join(write_path, '{}_{}_from_{}_to_{}.csv'.format(data_group, sn, start_time[0:10], end_time[0:10])), index=False, encoding='GB2312')
        print('downloading success!')

    # 根据经纬度计算距离
    @jit
    def cal_distance(self, latitude1, longitude1,latitude2, longitude2,radius=6371):  
        '''
        输入两个地点的经纬度,输出两点间的距离
        '''
        radLat1 = (math.pi/180)*latitude1  
        radLat2 = (math.pi/180)*latitude2  
        radLng1 = (math.pi/180)*longitude1  
        radLng2= (math.pi/180)*longitude2      
        d=2*math.asin(math.sqrt(math.pow(math.sin((radLat1-radLat2)/2.0),2)+math.cos(radLat1)*math.cos(radLat2)*math.pow(math.sin((radLng1-radLng2)/2.0),2)))*radius
        return d

    # 输入GPS数据, 返回本段数据中GPS 位置相距最远的距离
    # @jit
    # def cal_max_dis(self, lat, long):
    #     count = len(lat)
    #     dis_mat=np.zeros([count,count])
    #     for i in range(count):
    #         for j in range(i,count):
    #             dis_mat[i][j]=self.cal_distance(lat[i],long[i], lat[j],long[j])
                
    #     max_dis = dis_mat.max()
    #     return max_dis