# -*- coding: UTF8 -*-
"""
    MoinMoin - ... macro

    Allows to ... .

    @copyright: 20??-20?? Autho Name <author@url.org>,
    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin import wikiutil
from MoinMoin.Page import Page
from MoinMoin.parser.text_moin_wiki import Parser as MoinParser


class arg_to_dict(dict):
    def __init__(self, needle):
        dict.__init__(self)
        if needle!=None:
            for entry in needle.split(','):
                try:
                    if entry.split('=')[1].strip() != '':
                        self[entry.split('=')[0].strip()]=entry.split('=')[1].strip()
                    else:
                        self[entry.split('=')[0].strip()]=None
                except:
                    self[entry.split('=')[0].strip()]=None


class Macro:
    def __init__(self, macro, needle):
        self.request = macro.request
        self.pagename = self.request.page.page_name
        self.formatter=self.request.formatter
        self.page = Page(self.request, self.pagename)
        self.pagepath=self.page.getPageBasePath()[1]
        self.url=self.request.href(self.request.page.page_name)
        self.url_full=self.request.getQualifiedURL(self.url)
        self.title = self.page.split_title()
        self.formargs=self.request.values
        self.macroargs=arg_to_dict(needle)
    def do(self):
        moin_output="""
== Page Information ==
 * Moin-Pagename: %s
 * Moin-Pagetitle: %s
 * Moin-Pagepath: %s
 * Page-Url: %s
 * Full Page-Url: %s
 
== Url/ Form data ==
"""%(self.pagename, self.title, self.pagepath, self.url, self.url_full)
        for key in self.formargs.keys():
            moin_output+=u" * %s=%s\n"%(key, self.formargs.get(key))
        moin_output+="== Acl ==\n"
        if self.request.user.may.read(self.pagename):
            moin_output+=u" * You have read rights.\n"
        else:
            moin_output+=" * You don't have read rights.\n"
        if self.request.user.may.write(self.pagename):
            moin_output+=u" * You have write rights.\n"
        else:
            moin_output+=u" * You don't have write rights.\n"
        moin_output+="== Macro data ==\n"
        for key in self.macroargs.keys():
            moin_output+=u" * %s=%s\n"%(key, self.macroargs.get(key))
        parser=MoinParser(moin_output, self.request)
        parser.format(self.formatter)
        return ''


def execute(macro, needle):
    return Macro(macro, needle).do()