package com.modules.AcmeCreditUnion.view
{

    import com.dl.modules.pipes.components.PipeAwareModule;
    import com.dl.modules.pipes.events.ModuleEvents;
    import com.dl.mortgageapp.MortgageAppEventNames;
    import com.modules.AcmeCreditUnion.ModuleFacade;
    
    import org.puremvc.as3.multicore.interfaces.INotification;
    import org.puremvc.as3.multicore.patterns.observer.Notification;
    import org.puremvc.as3.multicore.utilities.pipes.interfaces.IPipeMessage;
    import org.puremvc.as3.multicore.utilities.pipes.messages.Message;
    import org.puremvc.as3.multicore.utilities.pipes.plumbing.Junction;
    import org.puremvc.as3.multicore.utilities.pipes.plumbing.JunctionMediator;

    public class ModuleJunctionMediator extends JunctionMediator
    {
        public static const NAME:String = 'AcmeCreditUnionJunctionMediator';
        private var moduleID:String;
        
        public function ModuleJunctionMediator(moduleID:String)
        {
            super(NAME, new Junction());
            this.moduleID = moduleID;
        }

        override public function listNotificationInterests():Array
        {
            var interests:Array = super.listNotificationInterests();
            interests.push(MortgageAppEventNames.REQUEST_FOR_LOAN);
            interests.push(ModuleFacade.QUOTE_GENERATED);
            interests.push(ModuleEvents.UNLOAD_MODULE);
            return interests;
        }
        
        override public function handleNotification(note:INotification):void
        {
            // Handle our Module->Application integration
            switch( note.getName() )
            {
                case ModuleFacade.QUOTE_GENERATED:
                    // convert our *local* notification into the application format
                    var quoteMessage:Message = new Message(MortgageAppEventNames.LOAN_QUOTE_READY,null,
                    new Notification(MortgageAppEventNames.LOAN_QUOTE_READY,note.getBody(),note.getType()));
                    junction.sendMessage(PipeAwareModule.MODULE_TO_APP_PIPE,quoteMessage);
                    break;
                case ModuleEvents.UNLOAD_MODULE:
                    note.setBody(moduleID);
                    junction.sendMessage(PipeAwareModule.MODULE_TO_APP_PIPE,new Message(MortgageAppEventNames.UNLOAD_MODULE,null,note));                    
                    break;
                default:
                    super.handleNotification(note);
                    
            }
        }
        
        override public function handlePipeMessage( message:IPipeMessage ):void
        {
            // Handle our Application->Module integration
            if(message.getBody() is INotification)
            {
                var note:INotification = message.getBody() as INotification;
                switch(note.getName())
                {
                    case MortgageAppEventNames.REQUEST_FOR_LOAN:
                    //case ModuleFacade.QUOTE_REQUESTED:
                        sendNotification(ModuleFacade.QUOTE_REQUESTED,note.getBody(),note.getType());
                        break;
                }
            }
        }
    }
}