import sys

from tinput import tinput, tinput_init
import tnz  

zcache = {}
Z      = {}    #root-zobj
z      = {}    #zobj
cmds = [
    'zls',
    'yls',
    'zstat',
    'zpath', 
    'open', 
    #

] 

def zm(s, PF=0):
    global zcache
    global z 
    global Z 
    
    #print('5:', s)
    tokens =s.split(' ')
    _value = tokens[0]
    r = ''

    if   s== 'zpath'  : r = z.get('zpath')
    elif s== 'zls'    : r = z.get('/zls')
    elif s== 'yls'    : r = z.get('/yls')
    elif s== 'zcache' : r = zcache.keys()
    elif s== 'z'      : r = z
    elif s== 'Z'      : r = Z
    elif s== '$'      : r = [k for k in z.keys() if k[0]=='$']
    elif s== '!'      : r = [k for k in z.keys() if k[0]=='!']
    elif s== 'z$'     : r = [k for k in z.keys() if k[0]=='$']
    elif s== 'z!'     : r = [k for k in z.keys() if k[0]=='!']
    elif s== 'z/'     : r = [k for k in z.keys() if k[0]=='/']
    elif s== 'Z$'     : r = [k for k in Z.keys() if k[0]=='$']
    elif s== 'Z!'     : r = [k for k in Z.keys() if k[0]=='!']
    elif s== 'Z/'     : r = [k for k in Z.keys() if k[0]=='/']
    elif s[0]  == '!' : r = z.get(s, 'bId not found')
    elif s[0]  == '$' : r = z.get(s, 'var not found')
    elif s[0:2]== 'z/': r = z.get(s[1:], 'zobj not found')
    #elif _value == 'z': 
    elif s[0:2] == 'Z/': 
        s[0:2]
        #change z-oobj 
        r = Z.get(s[1:])
        if r:z=r; r='zobj change :- '+ s 
        else:     r='zobj not found'
    
    elif _value in  ['Z', 'zz']:
        zobj, emsg = tnz.tnzm('fn:zparse '+ tokens[-1])
        if emsg:
            print('13: ', emsg)
        else:
            print('55: zz file open' )
            zcache[path] = zobj 
            z = zobj

    #print result PF(print flag)
    if PF and r: 
        if type(r) == list:
            for i,elm in enumerate(r):
                print(f'{i:>3} {elm}')
        
        if type(r) == dict:
            for k,v in r.items():
                print(f' {k:12}: {v}')
        
        if type(r) == str:
            print('9:', r)



if __name__ == "__main__":
    path = sys.argv[-1]

    kv = {
        'ZFS':'/home/rpi/ZFS',       #point to ZFS dir 
        'log_file':'./data/zm.log', 
        'LS_C':cmds,
        'zhist':'./data/zhist.zls',
        'ohist':'./data/ohist.zls',
        #'Z':Z, 'z':z
    }
    tinput_init(kv)
    
    zobj, emsg = tnz.tnzm('fn:zparse '+ path)
    print('11:')
    if emsg:
        print('13: ', emsg)
    else:
        zcache[path] = zobj 
        Z,z = zobj, zobj
        
    while 1:
        s = tinput('>')
        zm(s, 1)
    