# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - User macro
    
    Syntax:
        [[User]]
        Displays the name of the current user

        [[User(homepage)]]
        Displays a link to the user's homepage

        [[User(homepage=Your link text)]]
        Displays a renamed link to the user's homepage

        [[User(preferences)]]
        Display the user's preferences 
        
    @copyright: 2007 by Oliver Siemoneit
    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin import user, wikiutil

def _getArgs(given_arguments, allowed_arguments):
    if not given_arguments:
        return {}

    args = {}
    for s in given_arguments.split(','):
        if s and s.find('=') > 0:
            key, value = s.split('=', 1)
            key = key.strip()
            if key and value:
                if key in allowed_arguments:
                    args[key] = wikiutil.escape(value.strip())
            else:
                if key in allowed_arguments:
                    args[key] = None    
        else:
            key = s.strip()
            if key in allowed_arguments:
                args[key] = None
            
    return args

def _displayUserName(request):
    _ = request.getText

    if request.user.isCurrentUser():
        name = request.user.name
        aliasname = request.user.aliasname
        if not aliasname:
            aliasname = name
        if aliasname == "":
            return _('<unknown>')
        return aliasname

    return _('<unknown>')

def _displayHomepageLink(request, linktext):
    _ = request.getText
    
    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])
        # link to (interwiki) user homepage
        if linktext is None:
            homelink = "%s%s%s" % (request.formatter.interwikilink(1, title=title, id="userhome", generated=True, *interwiki),
                        request.formatter.text(name),
                        request.formatter.interwikilink(0, title=title, id="userhome", *interwiki))
            return homelink
        else:
            homelink = "%s%s%s" % (request.formatter.interwikilink(1, title=title, id="userhome", generated=True, *interwiki),
                        request.formatter.text(linktext),
                        request.formatter.interwikilink(0, title=title, id="userhome", *interwiki))
            return homelink
    else:
        if linktext is None:
            return _('<unknown>')
        else:
            return linktext 

def _displayUserPreferences(request):
    from MoinMoin import userform

    return request.formatter.rawHTML(userform.getUserForm(request, create_only=False))


def execute(macro, given_args):
    request = macro.request
    
    allowed_args = ['homepage', 'preferences']
    args = _getArgs(given_args, allowed_args)

    if not args:
        return _displayUserName(request)

    elif args.has_key('homepage'):
        return _displayHomepageLink(request, args['homepage'])

    elif args.has_key('preferences'):
        return _displayUserPreferences(request)

    return

