#!/usr/bin/env python

VERSION = "0.5"
AUTHOR = "Lukas Kolbe"

import sys
import os
from optparse import OptionParser
sys.path.append(os.path.abspath("%s/%s" % (os.path.dirname(sys.argv[0]),
    '../')))
from django.core.management import setup_environ
import local_settings
setup_environ(local_settings)
from mail import maps
from mail.models import Server

def output(iterable):
    for line in iterable:
        print line

def output_db(iterable):
    for address, pwhash in iterable:
        print "%s %s" % (address, pwhash)


def main(): 
    parser = OptionParser(version = "%%prog %s, %s" % (VERSION, AUTHOR))
    parser.add_option("-t", "--table",
            dest="table",
            choices=('transport_maps',
                'virtual_gid_maps',
                'virtual_uid_maps',
                'virtual_alias_maps',
                'virtual_mailbox_domains',
                'virtual_mailbox_maps',
                'dovecot_passdb',
                'dovecot_userdb',
                'ejabberd'),
            help="the map to dump, one of 'virtual_gid_maps' \
                    'virtual_uid_maps' 'virtual_alias_maps' \
                    'virtual_mailbox_domains' \
                    'virtual_mailbox_maps' 'dovecot_passdb' \
                    'dovecot_userdb' \
                    'ejabberd' 'transport_maps'")
    parser.add_option("-s", "--server",
            dest="server",
            help="server to print out maps for")

    (options, args) = parser.parse_args()

    try:
        current_server = Server.enabled_objects.get(name=options.server)
    except Server.DoesNotExist:
        print "Please, give an existing server on the commandline"
        sys.exit(1)

    if options.table == "virtual_mailbox_domains":
        output(maps.postfix_map(maps.domains(current_server)))
    elif options.table == "virtual_mailbox_maps":
        output(maps.postfix_map(maps.mailbox(current_server)))
    elif options.table == "virtual_alias_maps":
        output(maps.postfix_map(maps.virtual_alias_map(current_server)))
    elif options.table == "transport_maps":
        output(maps.postfix_map(maps.transport(current_server)))
    elif options.table == "virtual_uid_maps":
        output(maps.postfix_map(maps.uid(current_server)))
    elif options.table == "virtual_gid_maps":
        output(maps.postfix_map(maps.gid(current_server)))
    elif options.table == "dovecot_passdb":
        output(maps.dovecot_passdb_format(current_server))
    elif options.table == "dovecot_userdb":
        output(maps.dovecot_userdb_format(current_server))
    elif options.table == "ejabberd":
        output_db(maps.ejabberd_map(current_server))
    else:
        print "try --help for help"
        sys.exit(1)

if __name__ == "__main__":
    main()


