#!/bin/env python
from mailmanclient import Client
import os
import sys
import argparse
try:
    import json
except ImportError:
    import simplejson as json

def print_email_lists(email_lists):
    for eamil_list in email_lists:
        print email_list

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Dump Mailing List based on alias.")

    CORE_URI = os.environ.get('MAILMAN_CORE_URI','http://mailman-core:8001/3.1')
    CORE_USER = os.environ.get('MAILMAN_REST_USER', 'restadmin')
    CORE_PASS = os.environ.get('MAILMAN_REST_PASSWORD', 'restpass')

    LIST_NAME= 'apachesvn@lists.med.stanford.edu' # just a tesing default

    # user invoked variables
    parser.add_argument('--members', help='Dumps a full members list from an email list <setting_name>=<setting_value>')
    parser.add_argument('--list', action='store_true', default=False, help='Shows the email lists. (i.e.,apachesvn@lists.med.stanford.edu )')
    parser.add_argument('--file', help='Places input into a file.')

    # Add arguments for env variables
    parser.add_argument('--core-uri', dest='core_uri',default=CORE_URI)
    parser.add_argument('--rest-user', dest='core_user',default=CORE_USER)
    parser.add_argument('--rest-password', dest='core_password',default=CORE_PASS)

    # Parse out the command line arguments
    args = parser.parse_args()

    # Set the mailman client
    client = Client(args.core_uri, args.core_user, args.core_password)

    # append the mail lists to an array from client
    email_lists = []
    for mlist in client.lists:
        email_lists.append(mlist.fqdn_listname)


    # lists members of a list
    if args.members:
        members_hash={}
        email_list = args.members

        # get lists
        if email_list in email_lists:
            ml = client.get_list(LIST_NAME)
        elif email_list.upper() == 'ALL':
            print "Watch out thsi prints all lists."
        else:
            sys.exit('Error: Email list"'+email_list+'" does not exist in domain '+args.core_uri+
            "\nSee List\n"+print_email_lists(email_lists))
    elif args.list:
        # option just to show lists
        print_email_lists(email_lists)