
# vim: set ts=4 sw=4 expandtab:

from puremvc.patterns.mediator import Mediator

from ApplicationConstants import Notification

from pyjamas.Window import alert
from model.TimeProxy import TimeProxy
from view.components.FileOpenDlg import FileOpenDlg
from view.components.PreferencesDlg import PreferencesDlg
from view.components.HelpContentsDlg import HelpContentsDlg
from view.components.HelpAboutDlg import HelpAboutDlg
from pyjamas.Cookies import getCookie

import sys
from pyjamas.Window import alert
from __pyjamas__ import wnd

import base64

class MenuMediator(Mediator):

    NAME = 'MenuMediator'
    fileLocation = None

    def __init__(self, viewComponent):
        Mediator.__init__(self, MenuMediator.NAME, viewComponent)
        viewComponent.mFileOpen.setHandler(self.onFileOpen)
        viewComponent.mFileSaveAs.setHandler(self.onFileSaveAs)
        viewComponent.mFilePreferences.setHandler(self.onFilePreferences)
        viewComponent.mViewEdit.setHandler(self.onViewEdit)
        viewComponent.mViewSummary.setHandler(self.onViewSummary)
        viewComponent.mHelpContents.setHandler(self.onHelpContents)
        viewComponent.mHelpAbout.setHandler(self.onHelpAbout)
        self.timeProxy = self.facade.retrieveProxy(TimeProxy.NAME)
        try:
            fileLocation = getCookie("fileLocation")
        except:
            fileLocation = None
        self.fileLocation = self.checkFileLocation(fileLocation)
        self.onFileOpen(self.fileLocation)

    def listNotificationInterests(self):
        return []

    def handleNotification(self, note):
        pass

    def checkFileLocation(self, fileLocation):
        if fileLocation is None \
           or fileLocation is "null":
            fileLocation = "timesheet.txt"
        return fileLocation

    def onFileOpen(self, fileLocation = None):
        try:
            dlg = None

            def onOpen(sender):
                self.sendNotification(Notification.FILE_LOADED, 
                                      (dlg.filename, dlg.data))

            fileLocation = self.checkFileLocation(fileLocation)
            dlg = FileOpenDlg(fileLocation = fileLocation)
            dlg.openBtn.addClickListener(onOpen)
            dlg.show()
        except:
            raise

    def onFileSaveAs(self):
        data = self.timeProxy.exportData()
        data_uri = 'data:text/plain;base64,%s' % base64.encodestring(data)
        w = wnd().open('','_blank','scrollbars=yes,width=300,height=300')
        w.document.open("text/html")
        w.document.write("""<a href="%s">Right click here</a> if your browser supports data uri<br />Otherwise, you'll have to copy and paste this output to a text file<br />\n""" % data_uri)
        w.document.write("<pre>")
        w.document.write(data)
        w.document.write("</pre>")
        w.document.close()

    def onFilePreferences(self):
        dlg = PreferencesDlg()
        dlg.mediator = self
        dlg.show()

    def onViewEdit(self):
        self.sendNotification(Notification.EDIT_SELECTED)

    def onViewSummary(self):
        self.sendNotification(Notification.SUM_SELECTED)

    def onHelpContents(self):
        dlg = HelpContentsDlg()
        dlg.mediator = self
        dlg.show()

    def onHelpAbout(self):
        dlg = HelpAboutDlg()
        dlg.mediator = self
        dlg.show()
