#!/usr/bin/env python
import sys
import os
import locale
import getopt

import za_extra.aclsync

import MAPI
from MAPI.Util import *

def usage():
    print "Usage: %s [OPTIONS] [users...]" % os.path.basename(sys.argv[0])
    print "OPTIONS:"
    print "  -h | --host       \tHost to connect with. Default: file:///var/run/zarafa"
    print "                    \tThree formats are allowed for this option:"
    print
    print "                    \t  UNIX socket : file://<path to the UNIX socket>"
    print "                    \t         HTTP : http://<host or IP>:<port>/zarafa"
    print "                    \t  Secure HTTP : https://<host or IP>:<port>/zarafa"
    print
    print "  -s | --sslkey-file\tSSL key file for authentication."
    print "  -p | --sslkey-pass\tPassword for the SSL key file."
    print "  --help            \tShow this help message."
    print ""


def main(argv = None):
    locale.setlocale(locale.LC_ALL, '')

    if argv is None:
        argv = sys.argv

    try:
        opts, args = getopt.gnu_getopt(argv[1:], 'h:s:p:', ['help', 'host=', 'sslkey-file=', 'sslkey-pass='])
    except getopt.GetoptError, err:
        # print help information and exit:
        print "Error: %s" % err
        usage()
        return 1

    #defaults
    host = os.getenv('ZARAFA_SOCKET', 'file:///var/run/zarafa')
    sslkey_file = None
    sslkey_pass = None
    
    for o, a in opts:
        if o == '--help':
            usage()
            return 0
        elif o in ('-h', '--host'):
            host = a
        elif o in ('-s', '--sslkey-file'):
            sslkey_file = a
        elif o in ('-p', '--sslkey-pass'):
            sslkey_pass = a
        else:
            assert False, "unhandled option"

    try:
        session = OpenECSession('SYSTEM', '', host, sslkey_file = sslkey_file, sslkey_pass = sslkey_pass)
    except MAPIError, err:
        if err.hr == MAPI_E_LOGON_FAILED:
            print "Failed to logon. Make sure your SSL certificate is correct."
        elif err.hr == MAPI_E_NETWORK_ERROR:
            print "Unable to connect to server. Make sure you specified the correct server."
        else:
            print "Unexpected error occurred. hr=%08x" % err.hr
            print "Traceback:"
            exc_info = sys.exc_info()
            traceback.print_tb(exc_info[2], None, sys.stdout)
        return 1

    return za_extra.aclsync.main(session, args)

if __name__ == '__main__':
    sys.exit(main())
