#!/usr/bin/env python

import cmd

class EconAdmin(cmd.Cmd):

    prompt = 'econ-admin > '

    def __init__(self):
        cmd.Cmd.__init__(self) # cmd.Cmd is not a new style class

    def run_interactive(self, line=None):
        """Run an interactive session.
        """
        print 'Welcome to econ-admin interactive mode\n'
        self.do_about()
        print 'Type:  "?" or "help" for help on commands.\n'
        while 1:
            try:
                self.cmdloop()
                break
            except KeyboardInterrupt:
                raise

    def do_help(self, line=None):
        cmd.Cmd.do_help(self, line)

    def do_about(self, line=None):
        import econ
        version = econ.__version__
        about = \
'''Open Econ version %s. Copyright the Open Knowledge Foundation.
Open Econ is open-knowledge and open-source. See COPYING for details.
''' % version
        print about

    def do_quit(self, line=None):
        sys.exit()

    def do_EOF(self, *args):
        print ''
        sys.exit()

    # --------------
    # start commands

    def do_store_index(self, line=None):
        import econ.store.DataBundle
        basePath = line
        indexList = econ.store.make_index(basePath)
        for key, item in indexList.items():
            print key + '\t' + str(item) + '\n\n'

    def help_store_index(self, line=None):
        usage = \
'''store_index <store-path>

Print an index of the data store located at <store-path>'''
        print usage

    def _runserver_paste_plain(self):
        import econ.www.plainwsgi
        import paste.httpserver
        app = econ.www.plainwsgi.EconWebInterface()
        paste.httpserver.serve(app)

    def do_runserver(self, line=None):
        if not line: # default
            self._runserver_paste_plain()
        else:
            print 'Unknown argument: %s' % line
            self.help_runserver()

    def help_runserver(self, line=None):
        usage = \
'''runserver

Start a webserver (of optional type) to provide a web user interface to the
econ package.

The resulting website should be availabe at http://localhost:8080
'''
        print usage

    def do_bundle(self, line=None):
        if line == 'make': # default
            import econ.store.bundle
            store_path = econ.conf.get('DEFAULT', 'data_store_path')
            bndl = econ.store.bundle.create(store_path)
            print 'Created new data bundle %s at %s' % (bndl.id, bndl.path)
        else:
            print 'Unknown argument: %s' % line
            self.help_bundle()

    def help_bundle(self, line=None):
        usage = \
'''bundle [ make ]

make: create a new data empty data bundle.
'''
        print usage



if __name__ == '__main__':
    import sys
    adminCmd = EconAdmin()
    if len(sys.argv) < 2:
        adminCmd.run_interactive()
    else:
        args = ' '.join(sys.argv[1:])
        adminCmd.onecmd(args)
