# -*- coding: utf-8 -*-
"""すごく単純なWebチャットソフト"""
from datetime import datetime
from twisted.application import service, internet
from twisted.web import server, resource
from twisted.internet import reactor

template = """
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="" method="post">
<input type="text" name="comment">
<input type="submit" value="発言">
</form>
<hr>
%s
</body>
</html>
"""

loginform = """
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="" method="post">
<input type="text" name="name">
<input type="submit" value="入室">
</form>
</body>
</html>
"""

chatlog = []


def addComment(name, comment):
    text = '%s : %s (%s)' % (name, comment,
                             datetime.now().strftime('%Y/%m/%d %H:%M'))
    chatlog.insert(0, text)


def getComment(request):
    if 'comment' in request.args:
        return request.args['comment'][0]


def renderChatLog():
    return template % '<br>'.join(chatlog)


class Chat(resource.Resource):

    def render(self, request):
        cookie_name = request.getCookie('name')
        form_name = request.args.get('name', [''])[0]

        if not (cookie_name or form_name):
            return loginform

        if not cookie_name:
            request.addCookie('name', form_name)

        name = cookie_name or form_name
        
        comment = getComment(request)
        if comment:
            addComment(name, comment)
        return renderChatLog()


class ChatRoot(resource.Resource):

    def getChild(self, name, request):
        return Chat()


if __name__ == '__main__':
    root = ChatRoot()
    site = server.Site(root)
    reactor.listenTCP(8080, site)
    reactor.run()

#application = service.Application("web")
#service = internet.TCPServer(8080, site)
#service.setServiceParent(application)

