#!/usr/bin/python
#
# File:   manage_course_groups
#
# interactively list and edit membership in course staff and instructor groups

import os, sys, string, re
import datetime
from getpass import getpass
import json
import readline

from django.core.management.base import BaseCommand
from django.conf import settings
from django.contrib.auth.models import User, Group

#-----------------------------------------------------------------------------
# get all staff groups

class Command(BaseCommand):
    help = "Manage course group membership, interactively."

    def handle(self, *args, **options):

        gset = Group.objects.all()
        
        print "Groups:"
        for cnt,g in zip(range(len(gset)), gset):
            print "%d. %s" % (cnt,g)
        
        gnum = int(raw_input('Choose group to manage (enter #): '))
        
        group = gset[gnum]
        
        #-----------------------------------------------------------------------------
        # users in group
        
        uall = User.objects.all()
        if uall.count()<50:
            print "----"
            print "List of All Users: %s" % [str(x.username) for x in uall]
            print "----"
        else:
            print "----"
            print "There are %d users, which is too many to list" % uall.count()
            print "----"
        
        while True:
        
            print "Users in the group:"
            
            uset = group.user_set.all()
            for cnt, u in zip(range(len(uset)), uset):
                print "%d. %s" % (cnt, u)
        
            action = raw_input('Choose user to delete (enter #) or enter usernames (comma delim) to add: ')
        
            m = re.match('^[0-9]+$',action)
            if m:
                unum = int(action)
                u = uset[unum]
                print "Deleting user %s" % u
                u.groups.remove(group)
            
            else:
                for uname in action.split(','):
                    try:
                        user = User.objects.get(username=action)
                    except Exception as err:
                        print "Error %s" % err
                        continue
                    print "adding %s to group %s" % (user, group)
                    user.groups.add(group)
                
            
            
