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


# Get the entire email list
def get_email_lists(email_lists):
    members = ''
    for email_list in email_lists:
        members += email_list+"\n"
    return members

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Manage Users in Mailman Email Lists.")

    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('--list_fqdn', default=LIST_NAME)

    # 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.list_fqdn:
        # used to store members
        members_hash = {}
        # obtain email list from argument
        email_list = args.list_fqdn

        # get lists
        if email_list in email_lists:
            #member_list = client.get_list(LIST_NAME)
            # Get members from email list
            member_list = client.get_list(email_list)
            members_hash = {}

            # Get json data from each member
            for member in member_list.members:
                # members_hash['user']=member.user
                #members_hash['address']= member.address
                #members_hash['list_id']= member.list_id
                #members_hash['email']= member.email
                members_hash['address'] = member.address.rest_data
                #held_data[held.request_id] = held.rest_data
                #members_hash['preferences']= member.preferences
                print json.dumps(members_hash, indent=2)
        # Get all the member
        elif email_list.upper() == 'ALL':
            print "I couldn't get this to finsih!!!."
            members_hash={}
            # grabs users per page
            page = client.get_user_page(count=100, page=1)

            #loop through each page
            while len(page) > 0:
                for member in page:
                    print json.dumps(member.addresses.rest_data, indent=2)
                    time.sleep(.100) #pause between pages

                page = page.next


            # # Get json data from each member
            # for member in client.members:
            #     members_hash['email']= member.email
            #     print json.dumps(members_hash, indent=2)

        else:
            sys.exit('Error: Email list"'+email_list+'" does not exist in domain '+args.core_uri +
                     "\nSee List\n"+get_email_lists(email_lists))