# -*- coding: utf-8 -*-
"""
Created on Fri Nov 18 10:39:10 2022

@author: ppantina
"""

import numpy as np
import datetime
from matplotlib import pyplot as plt
import glob

def L0_parseTelemetry_TESTARENA (files, key):
    
    ##Define some variables
    filenames = np.sort(glob.glob(files))
    cat       = 0
    
    for i, j in enumerate(filenames): ##for all files
        print (j)
        data   = {}
    
        if key == 'hkp':
            raw = np.genfromtxt(j, dtype = ['S3', 'S19', 'i','i','i','i','S1','S6','i',\
                                                   'i','i','i','i','S6','S6','f','f','f', 'f',\
                                                   'f','f','f','f','f','f','f','f','f'], delimiter = ',', skip_footer = 1,invalid_raise=False)
        
            data['instrumentName']          = raw['f0']
            data['time']                    = raw['f1']
            data['instrumentStatus']        = raw['f2']
            data['arenaState']              = raw['f3']
            data['arenaTargetState']        = raw['f4']
            data['acqAutoModeState']        = raw['f5']
            data['acqAutoModeCompliance']   = raw['f6']
            data['acqAutoModeTransition']   = raw['f7']
            data['arenaControlTimeoutCount']= raw['f8']
            data['numGPS']                  = raw['f9']
            data['numNAV']                  = raw['f10']
            data['fault1']                  = raw['f11']
            data['fault2']                  = raw['f12']
            data['ttlOutputs']              = raw['f13']
            data['ttlInputs']               = raw['f14']
            data['tempCTU']                 = raw['f15']
            data['tempRfElectronics']       = raw['f16']
            data['tempRfBase']              = raw['f17']
            data['voltagePowerDectector']   = raw['f18']
            data['pressureRf']              = raw['f19']
            data['tempIFLO']                = raw['f20']
            data['tempSSPA']                = raw['f21']
            data['currentDC1']              = raw['f22']
            data['currentDC2']              = raw['f23']
            data['currentDC3']              = raw['f24']
            data['tempPDU']                 = raw['f25']
            data['pressurePDU']             = raw['f26']
            data['tempPC104']               = raw['f27']
        
            seconds= np.zeros(len(data['time']))
            for i, j in enumerate(data['time']):
                datestr = str(j, 'utf-8')
                yy = int(datestr[0 :4] )
                mm = int(datestr[4 :6] )
                dd = int(datestr[6 :8] )
                HH = int(datestr[9 :11])
                MM = int(datestr[11:13])
                SS = int(datestr[13:15])
                UU = int(datestr[16:19])
                seconds[i]  = datetime.datetime(yy,mm, dd, HH, MM, SS).timestamp() + UU/1000

            data['seconds'] = seconds
            data['cpusec']             =np.floor(data['seconds'][:]/1000.)
            data['cpunsec']            = 1e9*(data['seconds'][:]/1000. - np.floor(data['seconds'][:]/1000.))
        
        elif key == 'nav':
            raw = np.genfromtxt(j, dtype = ['i', 'S19', 'i8', 'i', 'S9', 'S23',\
                                                   'f', 'f', 'f', 'f', 'f', 'f', 'f', \
                                                   'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f',\
                                                   'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f', 'f',\
                                                   'f', 'f', 'f', 'f'], delimiter = ',', skip_footer = 1, invalid_raise=False)
        
            data['numRecord']          = raw['f0']
            data['time']               = raw['f1']
            data['seconds']            = raw['f2']
            data['cpusec']             =np.floor(data['seconds']/1000.)
            data['cpunsec']            = 1e9*(data['seconds']/1000. - np.floor(data['seconds']/1000.))
            data['unknown1']           = raw['f3']
            data['navType']            = raw['f4']
            data['datetime']           = raw['f5']
            data['IWG_lat']            = raw['f6']
            data['IWG_lon']            = raw['f7']
            data['gpsMSLalt']          = raw['f8']
            data['wgs84alt']           = raw['f9']
            data['pressureAlt']        = raw['f10']
            data['radarAlt']           = raw['f11']
            data['IWG_gspeed']        = raw['f12']
            data['IWG_aspeed']       = raw['f13']
            data['indicatedAirSpeed']  = raw['f14']
            data['machNumber']         = raw['f15']
            data['IWG_upspeed']       = raw['f16']
            data['IWG_head']        = raw['f17']
            data['IWG_track']              = raw['f18']
            data['IWG_drift']              = raw['f19']
            data['IWG_pitch']              = raw['f20']
            data['IWG_roll']               = raw['f21']
            data['sideSlip']           = raw['f22']
            data['angleOfAttack']      = raw['f23']
            data['ambientTemp']        = raw['f24']
            data['dewPoint']           = raw['f25']
            data['totalTemp']          = raw['f26']
            data['staticPressure']     = raw['f27']
            data['dynamicPressure']    = raw['f28']
            data['cabinPressure']      = raw['f29']
            data['IWG_windspeed']          = raw['f30']
            data['IWG_winddirection']      = raw['f31']
            data['IWG_vwind']  = raw['f32']
            data['solarZenith']        = raw['f33']
            data['sunElevAC']          = raw['f34']
            data['sunAzGrd']           = raw['f35']
            data['sunAzAC']            = raw['f36']
        
        elif key == 'gps':
            raw = np.genfromtxt(j, dtype = ['i', 'S19', 'i8', 'i', 'S9', 'i',\
                                                   'S', 'f', 'f', 'f', 'f', 'f', 'f', \
                                                   'f', 'f','f','f', 'S'], delimiter = ',', skip_footer = 1, invalid_raise=False)
        
            data['numRecord'] = raw['f0']
            data['time']      = raw['f1']
            data['seconds']   = raw['f2']
            data['cpusec']             =np.floor(data['seconds']/1000.)
            data['cpunsec']            = 1e9*(data['seconds']/1000. - np.floor(data['seconds']/1000.))
            data['unknown1']  = raw['f3']
            data['navType']   = raw['f4']
            data['INSPVA_week']  = raw['f5']
            data['unknown3']  = raw['f6']
            data['INSPVA_sec']  = raw['f7']
            data['INSPVA_lat']  = raw['f8']
            data['INSPVA_lon'] = raw['f9']
            data['INSPVA_height']    = raw['f10']
            data['INSPVA_nvel']  = raw['f11']
            data['INSPVA_evel']   = raw['f12']
            data['INSPVA_upvel']     = raw['f13']
            data['INSPVA_roll']      = raw['f14']
            data['INSPVA_pitch']     = raw['f15']
            data['INSPVA_head']   = raw['f16']
            data['unknown5']  = raw['f17']
        
        ##Create or concatenate the output dict
        if cat == 0:
            dataOut = data.copy()
            cat    = 1
        else: ##for each key, cat the values together        
            dataOut = {key:np.concatenate([dataOut[key],data[key]], axis = 0) for key in dataOut.keys()}
            print ('catting')
        #endif

        '''
        ##Convert time string to array
        time= np.zeros(len(data['time']), dtype = 'float64')
        for i, j in enumerate(data['time']):
            datestr = str(j, 'utf-8')
            yy = int(datestr[0 :4] )
            mm = int(datestr[4 :6] )
            dd = int(datestr[6 :8] )
            HH = int(datestr[9 :11])
            MM = int(datestr[11:13])
            SS = int(datestr[13:15])
            sdate_day  = datetime.datetime.toordinal(datetime.date(yy, mm, dd))
            sdate_frac = HH/24. + MM/1440. + SS/86400.
            time[i]    = sdate_day + sdate_frac
        
        keys = data.keys()
        
        for i, j in enumerate(keys):
            if ((data[j].dtype == 'int32') | (data[j].dtype == 'float32')):
                fig = plt.figure()
                ax = fig.add_subplot(111)
                ax.plot(time, data[j])
                ax.set_xlabel('Serial Date')
                ax.set_ylabel('Parameter')
                ax.set_title(j)
                plt.show()
            
        '''
    return(dataOut)
