#!python

# Modular Internet of Things
# Command line utility / REPL
# STATE: Pre-Alpha

print( "MIOT CLI, PRE-ALPHA" )

from miotcore import config

VERSION = '0.1.5'

""" TO BE INCLUDED
# miot                          Show help
# miot help                     Show help
# miot version                  Display Version
# miot list                     Display installed and available modules
# miot update                   Update modules
"""

import sys

# COMMAND SWITCHER
CMDswitcher = { 
    "--help":help,
    "get":get,
    "exist":exist,
    "exists":exist,
    "help":help,
    "list":list,
    "set":set,
    "update":update, 
    "version":version 
}

def die( message, subtext='', pointer=0 ):
    print( message )
    if subtext!='': print( "  "+subtext )
    if pointer>0:
        print( " "*(pointer+2)+"^" )
    sys.exit(1)

""" COMMANDS """

def unknown_cli( args, cmd ):
    die( "Unknown command: {}".format(" ".join(sys.argv[1:]) ))

def unknown_repl( args, cmd ):
    print( "- Unknown command: {}".format(cmd) )
     
def get( args ):
    if len(args)<1:
        die( "Missing parameter:", "get <key>", 5 )
    elif len(args)>1:
        die( "Unexpected character:", "get "+" ".join(args), 5+len(args[0]) )
    key = args[0]
    print( key+" = '"+config.get( key )+"'" )

def exist( args ):
    if len(args)<1:
        die( "Missing parameter: exist <key> [T|F]" )
    key = args[0]
    default = False
    print( len(args))
    if len(args)==2:
        print( "has default flag" )
        temp = args[2][0]
        print(temp)
        default = True if args[2][0].lower()==true else False
    result = config.exist( key, default )
    print( str(result) )
        
        
def help():
    print( """
# miot get <key>
# miot exists <key> [T/(F)]
# miot set <key> <value>
""")

def list():
    print( "LIST" )

    # READ CONFIG.INI FOR INSTALLED COMPONENTS
    # READ MODULES.DAT FOR AVAILABLE COMPONENTS
    # SHOW LIST

def update():
    print( "UPDATE")

def version():
    print( "Version: "+VERSION )

def repl():
    print( "Welcome to Modular IoT" )
    print( "Type 'quit' to exit, or 'help' for assistance." )
    running = True
    while running:
        value = input( ":" )
        if value!='':
            cmd = value.split(" ")
            if cmd[0]=='quit': 
                running = False
            else:
                func = CMDswitcher.get( cmd[0], unknown_repl )
                func( cmd[1:], cmd[0] )

def set( args ):
    if len(args)<2:
        die( "Missing parameter: get <key> <value>" )
    key = args.pop(0)
    value = " ".join(args)
    config.set( key, value )
    config.save()

# PROCESS ARGUMENTS
if len(sys.argv) <= 1:
    repl()
    sys.exit(0)

func = CMDswitcher.get( sys.argv[1], unknown_cli )
func( sys.argv[2:], sys.argv[1] )




