# Copyright (c) by it's authors. 
# Some rights reserved. See LICENSE, AUTHORS.
 
from peer import *
 
from roomDebugger import RoomDebugger
from documentChanger import DocumentChanger
# from credentials import Credentials
from listPeer import ListPeer
from viewer import Viewer
from editor import Editor
 
class RoomDebuggerRouting(Peer):
 
    Sending = [
        Viewer.In.Document,
        Editor.In.Enable,
        RoomDebugger.In.RequestDebugInfo,
        ListPeer.In.RequestedDocument
    ]
 
    Receiving = [
        RoomDebugger.Out.RequestedRooms,
        Editor.Out.FieldChanged
    ]
 
    Routings = [
        (RoomDebugger.Out.RequestedRooms, ListPeer.In.RequestedDocument),
        (RoomDebugger.Out.RequestedRooms, Viewer.In.Document),
        (ListPeer.Out.RequestDocument, RoomDebugger.In.RequestRooms),
        (RoomDebugger.Out.RequestedDebugInfo, Viewer.In.Document),
        (DocumentChanger.Out.SelectionChanged, Viewer.In.Refresh)
    ]
 
    # FIXME: (RoomDebugger.Out.RequestedActions, Viewer.In.Document),
 
    def __init__(self, room):
        Peer.__init__(self, room)
 
        self._roomDocument = None
 
        self._catch(Editor.Out.FieldChanged, self._fieldChanged)
        self._catch(RoomDebugger.Out.RequestedRooms, self._rooms)
 
    def initialize(self):
        # FIXME: self._throw(Credentials.Out.Credential, Document())
        self._throw(Editor.In.Enable, True)
 
    def _fieldChanged(self, pillow, path):
        if path == 'room':
            if self._roomDocument != None:
                room = self._roomDocument.get(path)
 
            self._throw(RoomDebugger.In.RequestDebugInfo, room)
 
    def _rooms(self, pillow, document):
        self._roomDocument = document 
        self._throw(ListPeer.In.RequestedDocument, document)
        self._throw(Viewer.In.Document, document)