#-*- mode: python; mode: fold -*-
from Globals import InitializeClass
from AccessControl import ClassSecurityInfo

from Products.CMFCore.utils import UniqueObject, getToolByName
from Products.CMFCore.permissions import View
from Products.CMFCore.permissions import ModifyPortalContent
from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder 
#from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument 
from Products.CPSDocument.CPSDocument import CPSDocument 
from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder 
from Products.WAeUP_SRP.WAeUPTables import AccommodationTable

class AccoFolder(CPSDocument): ###(
    """
    WAeUP AccoFolder containing Accommodation halls 
    """
    meta_type = 'AccoFolder'
    portal_type = meta_type
    security = ClassSecurityInfo()
    
    security.declareProtected(ModifyPortalContent,"generateFreeBedsList") ###(
    def generateFreeBedsList(self):
        """
        generate the free Bedslist.
        """
        freelist = AccommodationTable()
        l = self.portal_catalog({'meta_type': "Accommodation"}) 
        halls = []
        for h in l:
            halls.append(h.getObject())
        for hall in halls:
            h = hall.getContent()
            reserved = [int(r) for r in h.reserved_rooms.split()]
            print h.which_sex
            sex = 'male'
            if h.which_sex:
                sex = 'female'
            for block in range(1,int(h.nr_of_blocks)):
                for floor in range(1,int(h.nr_of_floors)):
                    for room in range(1,int(h.rooms_per_floor)):
                        for bed in 'ABCDEFGH'[:int(h.beds_per_room)]:
                            room_nr = floor*100 + room
                            if room_nr in reserved:
                                print room_nr
                                continue
                            bt = 'xx'
                            if bed in h.beds_for_fresh:
                                bt = 'fr'
                            elif bed in h.beds_for_returning:
                                bt = 're'
                            elif bed in h.beds_for_final:
                                bt = 'fi'
                            bt = "%(sex)s_%(bt)s" % vars()  
                            uid = '%s_%d_%s' % (hall.getId(),room_nr,bed)
                            print bt,uid
                            freelist.addRecord(bed = uid)
                            try:
                                freelist.modifyRecord(uid, bed = bed, bed_type = bt)
                            except ValueError,e:
                                freelist.deleteRecord(uid)
                    
        return self.accommodation.academics_contents()

###)

InitializeClass(AccoFolder)

def addAccoFolder(container, id, REQUEST=None, **kw):
    """Add a AccoFolder."""
    ob = AccoFolder(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)
###)

class Accommodation(CPSDocument): ###(
    """
    WAeUP Accommodation containing Departments 
    """
    meta_type = 'Accommodation'
    portal_type = meta_type
    security = ClassSecurityInfo()
    
    security.declareProtected(View,"Title") ###(
    def Title(self):
        """compose title"""
        content = self.getContent()
        heading = getattr(content,'heading',None)
        if heading is None:
            return self.title
        return heading

###)

        
                            
                
InitializeClass(Accommodation)

def addAccommodation(container, id, REQUEST=None, **kw):
    """Add a Accommodation."""
    ob = Accommodation(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)
###)
