__all__ = [
    'LAtLonSgn', 'read_profile', 'read_stnsz','read_eta_staids','read_hgtsmklmh','hst_3d','variaveis_3d'
]


def LAtLonSgn(latlon):
    card = latlon[-1]
    if card == "S" or card == "W":
        card_R = float(latlon[0:-1]) * -1
    elif card == "N" or card == "W":
        card_R = float(latlon[0:-1])
    return card_R

def read_profile(*args,**kwargs):
    import array
    import pandas as pd    
    import numpy as np  
    import matplotlib.pyplot as plt
    import os     
    ifile  = args[0]
    lm     = args[1]
    nsta   = args[2]
    nfct   = args[3]
    lcl1ml = args[4]
    lcl1sl = args[5]
    #
    data = array.array('f')
    #
    f = open(ifile, 'rb')
    #
    lrecpr = int(8+9+lcl1ml*lm+lcl1sl)
    #
    data.fromfile(f, lrecpr*nsta*nfct)
    f.close()
    #
    data_new = np.zeros((nfct, nsta, lrecpr))
    #
    reci=0
    recf= lrecpr-1
    for nh in range(0,nfct):
        for nst in range(0,nsta):
            l=0
            for k in range(reci,recf+1):
                data_new[nh][nst][l]=data[k]
                l=l+1
            reci = recf + 1
            recf = reci+ lrecpr -1
    return(data_new)

def read_ntnsz(*args,**kwargs):
    ifile = args[0]
    with open(ifile, encoding="utf-8") as f:
        r_info = f.readlines()
        result = (' '.join(r_info[0].split( ))).split(' ')
    return(int(result[0]),int(result[1]),int(result[2]))

def read_eta_staids(*args,**kwargs):
    import pandas as pd 
    import numpy as np  
    ifile = args[0]
    nsta = args[1]
    std  = np.array((nsta, 7))
    with open(ifile) as f:
        eta_staids = f.readlines()
    lista = []
    for j in range(0,nsta):
        std_line = (' '.join(eta_staids[j].split( ))).split(' ')
        
        line=[int(std_line[0])-1,std_line[1],std_line[2],std_line[3]
              ,std_line[5][:-1],std_line[6][:-1]] 
        lista.append(line)
    df_eta_staids = pd.DataFrame(lista) 
    df_eta_staids.columns = ["sta_idx","lat","lon","sigla","cidade","estado"] 
    return(eta_staids,df_eta_staids)

def read_hgtsmklmh(*args,**kwargs):
    import numpy as np  
    import pandas as pd    
    ifile = args[0]
    nsta = args[1]
    eta_staids = args[2]
    stn_hgtsmklmh  = np.empty((nsta, 3))
    with open(ifile) as f:
        hgtsmklmh = f.readlines()
        #        
        for j in range(0,nsta):
            var2 = []
            std = (' '.join(eta_staids[j].split( ))).split(' ')
            std_lat = LAtLonSgn(std[1])
            std_lon = LAtLonSgn(std[2])
            stn_hgtsmklmh_line = (' '.join(hgtsmklmh[j+1].split( ))).split(' ')
            stn_hgtsmklmh[j][0] = stn_hgtsmklmh_line[1]
            stn_hgtsmklmh[j][1] = stn_hgtsmklmh_line[2]
            stn_hgtsmklmh[j][2] = stn_hgtsmklmh_line[3]
        df_hgtsmklmh = pd.DataFrame(stn_hgtsmklmh) 
        df_hgtsmklmh.columns = ["hgt","sm","lmh"]
    return(df_hgtsmklmh)

def hst_3d(*args,**kwargs):
    import numpy as np  
    import pandas as pd
    array1 = args[0]
    sta  =  args[1]
    var = args[2]
    nfct = args[3]
        
    Mod_3dvar = np.zeros((int(array1[0][sta][11]),nfct))
    #print(Mod_3dvar.shape)
    indx_ini = 17 + var * int(array1[0][sta][11])
    indx_end = indx_ini+int(array1[0][sta][11])

    #print(indx_ini,indx_end)

    for j in range(0,nfct):
        k = 0
        for i in range(indx_ini,indx_end):
            Mod_3dvar[k][j] = array1[j][sta][i]
            k = k + 1
    #print(Mod_levels_T)
    return(Mod_3dvar)

def hst_2d(*args,**kwargs):
    import numpy as np  
    import pandas as pd
    array1 = args[0]
    sta  =  args[1]
    var = args[2]
    nfct = args[3]
    sname = args[4]
    Mod_2dvar = np.zeros((nfct,2))
    #print(Mod_2dvar.shape)
    offset = 17 + 15 * int(array1[0][sta][11])
    indx = offset + var
    #print(indx)

    for j in range(0,nfct):
        Mod_2dvar[j][0] = int(j)
        Mod_2dvar[j][1] = array1[j][sta][indx]        
    df_Mod_2dvar = pd.DataFrame(Mod_2dvar)
    df_Mod_2dvar.columns = ["fct",sname]
    return(Mod_2dvar,df_Mod_2dvar)

def variaveis_3d():
    import pandas as pd
    lista = []
    lista.append([ 0,  "pres", "Pressure (Pa)"])
    lista.append([ 1,  "temp", "Temperature (K)"])
    lista.append([ 2,  "uvel", "Zonal Wind (m/s)"])
    lista.append([ 3,  "vvel", "Meridional Wind (m/s)"])
    lista.append([ 4,  "umes", "Specific Humidity (g/g)"])
    lista.append([ 5, "omega", "Omega (Pa/s)"])
    lista.append([ 6,   "cwm", "Cloud Water/Ice"])
    lista.append([ 7, "tcucn", "Cumulus Precipitation"])
    lista.append([ 8, "train", "Total Precipitation"])
    lista.append([ 9, "rswtt", "SW RADIATIVE TEMPERATURE TENDENCIES"])
    lista.append([10, "rlwtt", "LW RADIATIVE TEMPERATURE TENDENCIES"])
    lista.append([11,   "ccr", "Cloud Cover Ratio"])
    lista.append([12,    "q2", "TURBULENT KINETIC ENERGY"])
    df_variaveis_3d = pd.DataFrame(lista) 
    df_variaveis_3d.columns = ["var_idx","sname","lname"]
    return(df_variaveis_3d)
    
def variaveis_2d():
    import pandas as pd
    lista = []
    
    lista.append([0,"slp",   "Pressão (Pa)"])
    lista.append([1,"pds",   ""])
    lista.append([2,"tsf",   ""])
    lista.append([3,"tlmin",   ""])
    lista.append([4,"tlmax",   ""])
    lista.append([5,"acprec",   ""])
    lista.append([6,"prec",   ""])
    lista.append([7,"cuprec",   ""])
    lista.append([8,"sfclhx",   ""])
    lista.append([9,"potflx",   ""])
    lista.append([10,"sfcshx",   ""])
    lista.append([11,"subshx",   ""])
    lista.append([12,"snopcx",   ""])
    lista.append([13,"aswin",   ""])
    lista.append([14,"aswout",   ""])
    lista.append([15,"alwin",   ""])
    lista.append([16,"alwout",   ""])
    lista.append([17,"alwtoa",   ""])
    lista.append([18,"aswtoa",   ""])
    lista.append([19,"acsnow",   ""])
    lista.append([20,"smstot",   ""])
    lista.append([21,"sno",   ""])
    lista.append([22,"acsnom",   ""])
    lista.append([23,"ssroff",   ""])
    lista.append([24,"bgroff",   ""])
    lista.append([25,"soiltb",   ""])
    lista.append([26,"z0",   ""])
    lista.append([27,"ut",   ""])
    lista.append([28,"vt",   ""])
    lista.append([29,"th10",   ""])
    lista.append([30,"q10",   ""])
    lista.append([31,"tshltr",   ""])
    lista.append([32,"qshltr",   ""])
    lista.append([33,"sfcexc",   ""])
    lista.append([34,"vegfrac",   ""])
    lista.append([35,"cmc",   ""])
    lista.append([36,"smc1",   ""])
    lista.append([37,"smc2",   ""])
    lista.append([38,"smc3",   ""])
    lista.append([39,"smc4",   ""])
    lista.append([40,"smc5",   ""])
    lista.append([41,"smc6",   ""])
    lista.append([42,"smc7",   ""])
    lista.append([43,"smc8",   ""])
    lista.append([44,"stc1",   ""])
    lista.append([45,"stc2",   ""])
    lista.append([46,"stc3",   ""])
    lista.append([47,"stc4",   ""])
    lista.append([48,"stc5",   ""])
    lista.append([49,"stc6",   ""])
    lista.append([50,"stc7",   ""])
    lista.append([51,"stc8",   ""])
    lista.append([52,"sm",   ""])
    lista.append([53,"cfracl",   ""])
    lista.append([54,"cfracm",   ""])
    lista.append([55,"cfrach",   ""])
    lista.append([56,"sr",   ""])
    lista.append([57,"hbot",   ""])
    df_variaveis_2d = pd.DataFrame(lista) 
    df_variaveis_2d.columns = ["var_idx","sname","lname"]
    return(df_variaveis_2d)    
