#!/usr/bin/env python
import argparse, sys
from libpathod import app, utils, version
import tornado.ioloop

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument("-p", dest='port', default=9999, type=int, help='Port.')
    parser.add_argument(
        "-a", dest='anchors', default=[], type=str, action="append",
        help='Add an anchor. Specified as a string with the form pattern=pagespec'
    )
    parser.add_argument(
        "-d", dest='staticdir', default=None, type=str,
        help='Directory for static files.'
    )
    parser.add_argument(
        "-s", dest='ssl', default=False,
        action="store_true",
        help='Serve with SSL.'
    )
    parser.add_argument(
        "--keyfile", dest='ssl_keyfile', default=None,
        type=str,
        help='SSL key file. If not specified, a default key is used.'
    )
    parser.add_argument(
        "--certfile", dest='ssl_certfile', default=None,
        type=str,
        help='SSL cert file. If not specified, a default cert is used.'
    )
    args = parser.parse_args()
    settings = dict(
        staticdir=args.staticdir
    )
    application = app.PathodApp(**settings)
    for i in args.anchors:
        try:
            rex, spec = utils.parse_anchor_spec(i, settings)
        except utils.AnchorError, v:
            parser.error(str(v))
        application.add_anchor(rex, spec)

    if args.ssl:
        ssl = dict(
             keyfile = args.ssl_keyfile or utils.data.path("resources/server.key"),
             certfile = args.ssl_certfile or utils.data.path("resources/server.crt"),
        )
    else:
        ssl = None
    print "%s listening on port %s"%(version.NAMEVERSION, args.port)
    try:
        app.run(application, args.port, ssl)
    except KeyboardInterrupt:
        pass
