#!/bin/python

'''
YmcFace

note that {'a':1}.get('b',0) yeild 0

'''
'''
######################################################################
'''

def bl_fromroomlog(payload,log):
    payload['fromrom'] = [payload['next']] + payload.get('fromroom',[])
    return payload

def NotSoRandomizedRoom(roommap={'default':[]}):
    '''
    this place randomise room within certain parameters
    '''
    import random
    def closure(payload,put,get):
        fromroom = payload.get('laterRandomizedRoom',['default'])[0]
        defaultchoice = roommap.get('default',['begin'])
        choice = roommap.get(fromroom,defaultchoice)
        choice = [ room for room in choice if not room in payload.get('laterRandomizedRoom',[]) ]
        payload['next'] = random.choice(choice)
        payload['laterRandomizedRoom'] = [payload['next']] + payload.get('laterRandomizedRoom',[])
        return payload
    return closure
'''
######################################################################
'''

if __name__ == '__main__':
    import coloop
    import io_tty
    import bl_keeptime
    import bl_keepsave
    import Noodle
    import Redfish
    import FizzBuzz

    scope = {}
    scope.update(Noodle.world)
    scope.update(Redfish.world)
    scope.update(FizzBuzz.world)
    scope['begin'] = NotSoRandomizedRoom({
        'default': [Noodle.begin,FizzBuzz.begin],
        Noodle.begin : [Redfish.begin]
    })
    scope['exit'] = scope['begin']
    def youaredead(payload,get,put):
        io_tty.put('you are dead')
        exit()
    scope['dead'] = youaredead

    payload = {
        'player' : io_tty.get('your name ?')[0] or 'guest',
        'next' : 'begin'
    }

    put = io_tty.put
    get = io_tty.get

    businesslogic = [
        bl_keeptime.bl_keeptime,
        bl_keepsave.keepsavefile,
        bl_fromroomlog,
        io_tty.bl_newline
    ]

    coloop.coloop(scope,payload,businesslogic)
