# -----------------------------------------------------------------
# This module defines metadata to be used by the batchSVN.py script.
# -----------------------------------------------------------------

import os
import sys
from batchSVNTypes import *

# ----------------------------------------------------------------
# Change these every term.
# ----------------------------------------------------------------
term = '201810'
num_sections = 4

# ----------------------------------------------------------------
# These can stayt the same from term to term
# ----------------------------------------------------------------
course = 'csse120'
courseDescription = 'CSSE 120'

repo_name_prefix = course + '-' + term + '-'

students_by_section = {}
all_students = []
for sec in range(1, num_sections + 1):
    sectionFile = open('/class/csse/csse120/scripts/csse120-' + term + '-' + str(sec) +\
                     '-users.txt', 'r')
    students_by_section[sec] = list()
    for line in sectionFile:
        students_by_section[sec].append(line.strip())
    sectionFile.close()
    all_students += students_by_section[sec]

all_users = list(all_students)
#for group in ['assistants', 'instructors', 'observers', 'special']:
#    sectionFile = open('/class/csse/csse120/scripts/csse120-' + term + '-' + group +\
#                     '.txt', 'r')
#    students_by_section[group] = list()
#    for line in sectionFile:
#        students_by_section[group].append(line.strip())
#    sectionFile.close()
#    all_users += students_by_section[group]

# ----------------------------------------------------------------
# Defines repositories sets for this course.  Used by main script.
# ----------------------------------------------------------------
reposSets = []
reposSets.append(RepositorySet("All Students", repo_name_prefix, all_students))
reposSets.append(RepositorySet("Stouder Students", repo_name_prefix, 
                 students_by_section[1] + students_by_section[2]))
reposSets.append(RepositorySet("Mutchler Students", repo_name_prefix,  
                               students_by_section[4]))
reposSets.append(RepositorySet("Boutell Students", repo_name_prefix,  
                               students_by_section[3]))

for sec in range(1, num_sections + 1):
    reposSets.append(RepositorySet("Section " + str(sec), repo_name_prefix, students_by_section[sec]))

#reposSets.append(RepositorySet("Assistants", repo_name_prefix,
#                 students_by_section['assistants']))
#reposSets.append(RepositorySet("Instructors", repo_name_prefix,
#                 students_by_section['instructors']))
#reposSets.append(RepositorySet("Observers", repo_name_prefix,
#                 students_by_section['observers']))
#reposSets.append(RepositorySet("Special", repo_name_prefix,
#                 students_by_section['special']))
reposSets.append(RepositorySet("All Users", repo_name_prefix, all_users))

#reposSets.append(RepositorySet("SmallSetforTesting", repo_name_prefix, [
#    "mutchler"
#]))

# ----------------------------------------------------------------
# Defines project names and unit tests for this course. 
# Used by main script.
# ----------------------------------------------------------------
projects = []
projects.append(Project("BOGUS_ZERO_SO_REST_OF_NUMBERS_COME_OUT_RIGHT"))
projects.append(Project("Session01_IntroductionToPython"))
projects.append(Project("Session02_InputComputeOutput"))
projects.append(Project("Session03_LoopsAndUsingObjects")) 
projects.append(Project("Session04_FunctionsAndAccumulators"))
projects.append(Project("Session05_RobotsConditionalsAndAccumulators"))
projects.append(Project("Session06_TheAccumulatorPattern"))
projects.append(Project("Session07_Exam1"))
projects.append(Project("Session08_WaitingUntilEventsAndRobots"))
projects.append(Project("Session09_Exam1_201410"))
projects.append(Project("Session10_Sequences"))
projects.append(Project("Session11_AccumulatingSequencesAndFancyIterating"))
projects.append(Project("Session12_RobotSongsAndSequences"))
projects.append(Project("Session13_ReferencesToObjects"))
projects.append(Project("Session14_Test2Practice"))
projects.append(Project("Session15_Strings"))
projects.append(Project("Session16_DefiningClasses_Part1"))
projects.append(Project("Session17_Test2_201410"))
projects.append(Project("Session18_DefiningClasses_Part2"))
projects.append(Project("Session19_DefiningClasses_Part3"))
projects.append(Project("Practice_Project_201410"))
projects.append(Project("ZProject_201410"))
projects.append(Project("Session22_Test3Practice"))
projects.append(Project("Session27_LoopsWithinLoops"))
projects.append(Project("Session31_FinalExam_201410"))


# ----------------------------------------------------------------
# Defines any additional main menu commands for this course.
# Used by main script.
# ----------------------------------------------------------------
menuItems = []
# ----------------------------------------------------------------
# Sample code to add a zip command to the menu:
# def zipForDownload(data):
#     if os.access(data.activeProject.name,os.F_OK):
#         os.system('zip -r %s.zip %s' % (data.activeProject.name,
#                                         data.activeProject.name))
#         if not os.access(data.activeProject.name + '.zip',os.F_OK):
#             print '\a\n*** Unable to create zip file ***\n'
#     return False
# menuItems.append(MenuItem('Zip local project subdirectory for download',
#                           zipForDownload))
# ----------------------------------------------------------------

# ----------------------------------------------------------------
# A couple of extra menu items that are useful in a pinch, but aren't yet 
# sufficiently abstracted for general use.
# def copyInExtras(data):
#     forEachRepo("cp ${scriptDir}/*.java ${shortName}/src/btwp/", data)
#     return False
# menuItems.append(MenuItem('Copy in Exam2 test files',copyInExtras))
# 
# def runTestsExtraMem(data):
#     forEachRepo("cd ${shortName} && java -Xmx2000m -cp '${scriptDir}/junit-4.5.jar:bin' org.junit.runner.JUnitCore ${testClasses}", data)
#     return False
# menuItems.append(MenuItem('Run JUnit tests with extra memory',runTestsExtraMem))
# ----------------------------------------------------------------
   


# ----------------------------------------------------------------
# Some test code, executed if this file is imported directly into
# a python shell.  Shouldn't need to change this when specifying
# course-specific data above.
# ----------------------------------------------------------------
if __name__ == '__main__':
    # print "reposSets ==", reposSets
    for i in range(len(reposSets)):
        print "Repositories from reposSets[i]:\n"
        for r in reposSets[i].repos():
            print "   ", r, '\n'
    print "repository names: ", [r.name for r in reposSets], '\n'
    print
    print projects
    print "Test classes:"
    for p in projects:
        print "   %s: %s" % (p.name, p.testClasses)
    print "Additional Menu Items' Text:"
    for mi in menuItems:
        print "  ", mi.text