#-*- 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
import Globals
import DateTime
import re
p_home = Globals.package_home(globals())
i_home = Globals.INSTANCE_HOME

class AccoFolder(CPSDocument): ###(
    """
    WAeUP AccoFolder containing Accommodation halls
    """
    meta_type = 'AccoFolder'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        return "Accommodation Section"

    security.declareProtected(ModifyPortalContent,"generateFreeBedsList") ###(
    def generateFreeBedsList(self):
        """
        generate the free Bedslist.
        """
        freelist = self.portal_accommodation
        l = self.portal_catalog({'meta_type': "AccoHall"})
        halls = []
        generated = []
        generated.append('"Bed","BedType","Student"' % vars())
        beds_generated = []
        for h in l:
            halls.append(h.getObject())
        for hall in halls:
            #import pdb;pdb.set_trace()
            h = hall.getContent()
            hall_gen = {}
            hall_gen['name'] = hall.Title
            count = 0
            reserved = [(r.split('/')[0],int(r.split('/')[1])) for r in re.split(',|\.| ',h.reserved_rooms)
                                     if r]
            #for block in range(1,int(h.nr_of_blocks)+1):
            for block in 'ABCDEFGHIJ'[:int(h.nr_of_blocks)]:
                sex = 'male'
                if block in h.blocks_for_female:
                    sex = 'female'
                for floor in range(1,int(h.nr_of_floors)+1):
                    for room in range(1,int(h.rooms_per_floor)+1):
                        for bed in 'ABCDEFGH'[:int(h.beds_per_room)]:
                            room_nr = floor*100 + room
                            bt = 're'
                            if (block,room_nr) in reserved:
                                bt = "reserved"
                            elif not h.special_handling.startswith("no"):
                                bt = h.special_handling
                            elif 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'
                            if h.special_handling.startswith("no_"):
                                bt += "_" + h.special_handling[3:]
                            bt = "%(sex)s_%(bt)s" % vars()
                            uid = '%s_%s_%d_%s' % (hall.getId(),block,room_nr,bed)
                            try:
                                freelist.addRecord(bed = uid, bed_type = bt,hall = hall.getId())
                                count +=1
                                generated.append('"%(uid)s","%(bt)s"' % vars())
                            except ValueError:
                                #freelist.modifyRecord(bed = uid, bed_type = bt,hall =hall.getId())
                                pass
            hall_gen['count']= count
            beds_generated.append(hall_gen)
        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
        open("%s/import/bedlist_%s.csv" % (i_home,current),"w+").write('\n'.join(generated))
        return self.accommodation.acco_folder_view(beds_generated=beds_generated)

###)

InitializeClass(AccoFolder)

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

class AccoHall(CPSDocument): ###(
    """
    WAeUP AccoHall containing Departments
    """
    meta_type = 'AccoHall'
    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(AccoHall)

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