import time
import urlparse

import twisted.web.server
from twisted.web.woven import view
from twisted.web.woven import page
from twisted.web.woven import model
from twisted.web.woven import input
from twisted.web.microdom import lmx
from twisted.web.woven import widgets
from twisted.web.woven import controller
from twisted.python import components


#
# Set up the session I'll be using:
#
class IPreferences(components.Interface):
        pass

class Preferences(components.Adapter):
        __implements__ = IPreferences

components.registerAdapter(Preferences, twisted.web.server.Session, IPreferences)


class MyModel(model.MethodModel):
        """
        """
        pass

class NavigationControlsDisplay(view.View):
        template = """
        <div>
                <div id="navigationMenu">
                        <form action="control">
                                <input type="hidden" name="action" value="set_view"/>
                                <input type="hidden" name="view" value="view1"/>
                                <input type="submit" value="Set View1" accesskey="1"/>
                        </form>
                        <form action="control">
                                <input type="hidden" name="action" value="set_view"/>
                                <input type="hidden" name="view" value="view2"/>
                                <input type="submit" value="Set View2" accesskey="2"/>
                        </form>
                        <div>&nbsp;</div>
                        <div>&nbsp;</div>
                </div>
        </div>
        """


class View1(view.View):
        """
        """
        template = """
                <div>
                        <p>
                                View One
                        </p>
                </div>
                """

class View2(view.View):
        """
        """
        template = """
                <div>
                        <p>
                                View Two
                        </p>
                </div>
                """


class MyPage(page.Page):
        """
        """
        template ="""<?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                        <head>
                                <title>Live View</title>
                                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                        </head>
                        <body>
                                <div view="navigation"/>
                                <div view="current_view"/>
                        </body>
                </html>
                """
        def wvfactory_current_view(self, request, node, model):
                print("cafemonitor.CafePage.wvfactory_current_view")

                prefs = request.getSession(IPreferences)
                view = getattr(prefs, 'current_view','live_view')
                print("Selecting view <%s>." % view)

                if view == "view1":
                        print("Returning View1.")
                        return View1(model)

                elif view == "view2":
                        print("Returning View2.")
                        return View2(model)

                 else:
                        print("unknown view <%s>. Returning View1." % view)
                        return View1(model)
                        

        def wchild_control(self, request):
                """This is a fake /control subdirectory used to control a specific machine.

                request - action:

                        new, complete, void, restore.
                """
                print("wchild_control - request.args <%s>." % str(request.args))

                action = request.args.get("action", 0)[0]

                if action == "set_view":
                        prefs = request.getSession(IPreferences)
                        view = request.args.get("view", 0)[0]
                        print("Setting new view from navigation menu selection <%s>." % view)
                        prefs.current_view = view

                 else:
                        print("unknown action <%s>." % action)

                return self


resource = MyPage(MyModel())
resource.setSubviewFactory("navigation", NavigationControlsDisplay)