import sys
import getopt
import httplib

import RelaxNGCheck

verbose = False
create = False
delete = False
server_name = "localhost"
server_port = 8080

def usage(msg=None):
    sys.stderr.write("Usage: %s [-c] domain [holder]\n  %s\n" % (sys.argv[0], msg))

def display_result(connection):
    result = connection.getresponse()
    print result.status, result.reason
    data = result.read()
    if data:
        checker_reply.check(data)
        print data

try:
    optlist, args = getopt.getopt (sys.argv[1:], "hcvd",
                                           ["help", "verbose", "create", "delete"])
    for option, value in optlist:
        if option == "--help" or option == "-h":
            usage()
            sys.exit(0)
        elif option == "--verbose" or option == "-v":
            verbose = True
        elif option == "--create" or option == "-c":
            create = True
        elif option == "--delete" or option == "-d":
            delete = True
        else:
            usage ("Unknown option " + option)
            sys.exit(1)
except getopt.error, reason:
    usage(reason)
    sys.exit(1)
if create:
    if delete:
        usage("Delete or create but not both")
        sys.exit(1)
    if len(args) <> 2:
        usage("To create a domain, the holder is mandatory")
        sys.exit(1)
    holder = args[1]
elif len(args) <> 1:
    usage("Extra or missing arguments")
    sys.exit(1)
domain = args[0]
checker_reply = RelaxNGCheck.Check("file:schema-reply.rnc")
connection = httplib.HTTPConnection(server_name, server_port)
if create:
    connection.request("PUT", domain, """
     <domain>
        <holder>%s</holder>
     </domain>""" % holder)
    display_result(connection)
elif delete:
    connection.request("DELETE", domain)
    display_result(connection)
else:
    connection.request("GET", domain)
    display_result(connection)
