#!/usr/bin/env python

import sys
import coredata

def usage ():
    print 'usage: %s set|get <type> <name> <value>' % sys.argv[0]
    print '    type: int32, double, bool, file_command, string, string_int_map, byte_block, registered_devices'

if __name__ == '__main__':
    types = {'int32' : (int, coredata.int32),
            'double' : (float, coredata.double),
            'bool' : (bool, coredata.bool),
            'file_command' : ([int,str], coredata.file_command),
            'string' : (str, coredata.string),
            'string_int_map' : ([str,int], coredata.string_int_map),
            'byte_block' : (str, coredata.byte_block),
            'registered_devices' : (str, coredata.registered_devices)
            }

    # parse args
    try:
        cmd = sys.argv[1]
        type = sys.argv[2]
        name = sys.argv[3]
        if cmd != 'set' and cmd != 'get':
            raise IndexError
        create = types[type][1]
        conversion = types[type][0]
    except (IndexError, KeyError):
        usage ()
        sys.exit (1)

    datum = create (name)
    if cmd == 'set':
        if isinstance(conversion,list):
            value = []
            i = 4
            for convert in conversion:
                value.append(convert(sys.argv[i]))
                i+=1
            datum.set (value)
        else:
            datum.set (conversion(sys.argv[4]))
    elif cmd == 'get':
        print datum.get().__str__()
