#! /usr/bin/env python

"""
usage: %prog [args]
"""

import roslib
roslib.load_manifest('app_manager')
import rospkg

import os
import sys
import string
from optparse import OptionParser

import app_manager
import rospy

def main(argv, stdout, environ):

    args = rospy.myargv()
    parser = OptionParser()

    applist_default = app_manager.get_default_applist_directory()
    
    parser.add_option("--applist", dest="applist_directory",
                      default=applist_default,
                      help="path to applist directories, semi-colon delimited", metavar="PATH")
    options, args = parser.parse_args(args)
    for i in options.applist_directory.split(';'):
        if not os.path.exists(i):
            parser.error("applist directory [%s] does not exist.\nUse --applist to set the correct location"%(i))
    
    rospy.init_node('app_manager')

    robot_name = rospy.get_param('/robot/name', 'robot')
    interface_master = rospy.get_param('~interface_master', 'http://localhost:11312')

    try:
        app_list = app_manager.AppList(options.applist_directory.split(";"))
    except app_manager.AppException as e:
        print >> sys.stderr, "Failed to load app list: %s"%(str(e))
        sys.exit(1)

    exchange = None

    exchange_url = rospy.get_param('/robot/exchange_url', '')
    if (exchange_url != ""):
        try:
            app_path = os.path.join(rospkg.get_ros_home(), "exchange")
            if (not os.path.exists(app_path)):
                os.makedirs(app_path)
            exchange = app_manager.Exchange(exchange_url, app_path, lambda(x): rospy.logerr(x))
            app_list.add_directory(os.path.join(app_path, "installed"))
        except app_manager.AppException as e:
            print >> sys.stderr, "Failed to load exchange: %s"%(str(e))
            sys.exit(1)
    
    am = app_manager.AppManager(robot_name, interface_master, app_list, exchange)

    rospy.on_shutdown(am.shutdown)

    rospy.spin()



if __name__ == "__main__":
    main(sys.argv, sys.stdout, os.environ)
