#!/usr/bin/env python
import sys
import optparse
import port_for
import port_for.store

store = port_for.store.PortStore('/etc/port-for.conf')

def list_callback(option, opt_str, value, parser):
    for app, port in store.bound_ports():
        sys.stdout.write("%s: %s\n" % (app, port))

def bind_callback(option, opt_str, value, parser):
    app_name = value
    port = store.bind_port(app_name)
    sys.stdout.write("%s\n" % port)

def unbind_callback(option, opt_str, value, parser):
    store.unbind_port(value)

def main():
    # hack for ``port-for foo`` support
    if len(sys.argv) == 2 and not sys.argv[1].startswith('-'):
        bind_callback(None, None, sys.argv[1], None)
        return

    parser = optparse.OptionParser(usage="usage: '%prog FOO' or '%prog [options]'",
                          version="%prog " + str(port_for.__version__))

    parser.add_option('-l', '--list', action="callback",
        callback=list_callback, help="list all ports managed by port-for")
    parser.add_option('-b', '--bind', action="callback", metavar='FOO',
        callback=bind_callback, type="string", help="find and return a port for FOO; this is an alias for 'port-for FOO'")
    parser.add_option('-u', '--unbind', action='callback', metavar='FOO',
        callback=unbind_callback, type="string", help='remove association for FOO')

    options, args = parser.parse_args()
    if len(sys.argv) == 1:
        parser.print_help()

if __name__ == '__main__':
    main()
