# -*- coding: utf-8 -*-
import re
from MoinMoin.theme import ThemeBase
from MoinMoin.Page import Page
from MoinMoin import wikiutil
from cgi import escape as e


def trim_pn(s):
    result = []
    for part in s.split(u'/'):
        p = re.split('([A-Z]+)', part)
        if not p:
            continue
        result.append(p[0] + u'-'.join((p[i] + p[i+1]).lower()
                      for i in xrange(1, len(p) - 1, 2)))
    return u' / '.join(result)


class Theme(ThemeBase):
    name = 'lucumr'

    def header(self, d, **kw):
        return u'''
  <div id="page-wiki">
  <div id="header">
    <h1><span>lucumr</span></h1>
    <div id="navigation">
      <ul>
        <li><a id="nav-blog" href="/">blog</a></li>
        <li><a id="nav-archives" href="/archives/">archives</a></li>
        <!-- <li><a id="nav-articles" href="/articles/">articles</a></li> -->
        <li><a id="nav-gallery" href="/gallery/">gallery</a></li>
        <li><a id="nav-tags" href="/tags/">tags</a></li>
        <li><a id="nav-wiki" href="/wiki/">wiki</a></li>
        <li><a id="nav-about" href="/about/">about</a></li>
      </ul>
    </div>
  </div>
  <div id="body">
    
  <div id="layout_2col">
    <div id="column1">
      <div class="column1-wrapper">
        
  <h1 class="section">%(titleextra)s%(title)s</h1>
  <div class="meta">%(metadata)s</div>
  %(msg)s
        ''' % {
            'title':        self.title(d),
            'titleextra':   kw.get('titleextra', u''),
            'metadata':     self.pageinfo(d['page']),
            'msg':          self.msg(d)
        }

    def editorheader(self, d):
        return self.header(d, titleextra='Edit Page - ')

    def footer(self, d, **kw):
        return u'''
</div>
    </div>
    <div id="column2">
      <div class="column2-wrapper">

        <h2 class="section">Pages</h2>
        %(navibar)s

        <h2 class="section">Actions</h2>
        %(actions)s

        %(tags)s

        <h2 class="section">Account</h2>
        %(useraccount)s
      
      </div>
    </div>
    <br style="clear: both;">
  </div>

  </div>
  <div id="footer">
    lucumr wiki - driven by <a href="http://moinmoin.wikiwikiweb.de/">moin</a><br>
    design and sourcecode licensed under the <a
    href="http://www.gnu.org/licenses/gpl.html">gnu gpl</a> 2 license<br>
    contents licensed under the <a
    href="http://creativecommons.org/licenses/by-nc-sa/2.0/at/"
    >creative commons</a> license<br>
    view <a href="?action=raw">page source</a>, <a href="?action=format&mimetype=xml/docbook">as docbook</a>

  </div>
</div>
        ''' % {
            'navibar': self.navibar(d),
            'actions': self.editbar(d),
            'tags': self.tags(d),
            'useraccount': self.useraccount(d)
        }

    def title(self, d):
        return e(d['page_name'])

    def useraccount(self, d):
        request = self.request
        _ = request.getText
        preferencesPage = wikiutil.getSysPage(request, 'UserPreferences')
        
        userlinks = []
        # Add username/homepage link for registered users. We don't care
        # if it exists, the user can create it.
        if request.user.valid and request.user.name:
            interwiki = wikiutil.getInterwikiHomePage(request)
            name = request.user.name
            aliasname = request.user.aliasname
            if not aliasname:
                aliasname = name
            title = "%s @ %s" % (aliasname, interwiki[0])
            homelink = (request.formatter.interwikilink(1, title=title, *interwiki) +
                        request.formatter.text(name) +
                        request.formatter.interwikilink(0))
            userlinks.append(homelink)        
            # Set pref page to localized Preferences page
            title = preferencesPage.split_title(request)
            userlinks.append(preferencesPage.link_to(request, text=title))
            
            userlinks.append('<a href="?action=logout&logout=logout">%s</a>' % _('Logout'))
        else:
            userlinks.append('<a href="?action=login">%s</a>' % _("Login"))

        userlinks = [u'<li>%s</li>' % link for link in userlinks]
        return u'<ul>%s</ul>' % u'\n'.join(userlinks)        

    def editbarItems(self, d):
        _ = self.request.getText
        if d['title_link']:
            backlink = '<a class="backlink" title="%(title)s" href="%(href)s">%(text)s</a>' % {
                'title': _('Click to do a full-text search for this title'),
                'href': d['title_link'],
                'text': wikiutil.escape(_('Backlinks')),
            }
        else:
            backlink = e(d['title_text'])
        return [backlink] + ThemeBase.editbarItems(self, d['page'])

    def editbar(self, d):
        page = d['page']       
        html = self._cache.get('editbar')
        if html is None:
            # Remove empty items and format as list
            items = ''.join(['<li>%s</li>' % item
                             for item in self.editbarItems(d) if item])
            html = u'<ul class="editbar">%s</ul>\n' % items
            self._cache['editbar'] = html
        return html

    def tags(self, d):
        taglist = getattr(self.request, 'wikitags', None)
        if not taglist:
            return u''
        tags = []
        for tag in taglist:
            tags.append(u'<li><a href="/tags/%s/">%s</a></li>' % (e(tag), e(tag)))
        return u'<h2 class="section">Tags</h1><ul>%s</ul>' % u'\n'.join(tags)

    def html_head(self, d):
        return u'\n'.join([
            u'<title>lucumr / wiki / %s</title>' % trim_pn(getattr(d.get('page', None), 'page_name', u'')),
            self.externalScript('common'),
            self.headscript(d),
            self.guiEditorScript(d),
            self.html_stylesheets(d),
            self.rsslink(),
        ])


def execute(req):
    return Theme(req)

