#!/usr/bin/env python
# encoding: utf-8

import os
import re

class Deliverable:
	def __init__(self, devno):
		self.__number = devno
		self.__zip = 0
		self.__jar = 0
		
	def setZip(self):
		self.__zip = 1
	
	def setJar(self):
		self.__jar = 1
		
	def isDelivered(self):
		return self.__zip + self.__jar

class Team:
	def __init__(self, teamno):
		self.__teamno = teamno
		self.__delivs = {}
	
	def getDeliv(self, delivno):
		try:
			self.__delivs[delivno]
		except KeyError:
			self.__delivs[delivno] = Deliverable(delivno)			
		return self.__delivs[delivno]
		
	def setDeliv(self, delivno, deliv):
		self.__delivs[delivno] = deliv

def main():
	teams = {}
	regex = re.compile("2007A_([0-9]+)_([0-9]+)_(1|2|3)_.*\\.(zip|jar|rar)")
	
	# first part
	for root, dirs, files in os.walk("./exercises/"):
		if root == './exercises/':
			for f in files:
				# parse the filename
				mo = regex.search(f)
				if mo == None:
					print "%s file produced an error ... " % ( f, )
					continue
				teamno = mo.group(1).strip()
				registry = mo.group(2).strip()
				delivno = mo.group(3).strip()
				# find the current team object
				try:
					teams[teamno]
				except KeyError:
					teams[teamno] = Team(teamno)
				curTeam = teams[teamno]
				# do the work
				curDeliv = curTeam.getDeliv(delivno)
				if f.endswith('.jar'):
					curDeliv.setJar()
				if f.endswith('.zip') or f.endswith('.rar'):
					curDeliv.setZip()
				curTeam.setDeliv(delivno, curDeliv)
				teams[teamno] = curTeam
	# now print out the results
	# second part
	keysSort = teams.keys()
	keysSort.sort(lambda x, y: int(x)-int(y))
	for k in keysSort:
		cTeam = teams[k]
		print "Team %s - " % ( k, ),
		for i in (1, 2, 3):
			deliv = cTeam.getDeliv(str(i)).isDelivered()
			if deliv == 2:
				print "%d delivered" % ( i, ),
			else:
				print "%d not delivered" % ( i, ),
			if i == 3:
				print "\n",
			else:
				print ", ",

if __name__ == '__main__':
	main()
