# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - ListPagePacks Macro
    This macro shows in which pagepack a page is and if the page is translated

    @copyright: 2010 MoinMoin:ReimarBauer

    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin import i18n
from MoinMoin import wikiutil
from MoinMoin.action import AttachFile
from MoinMoin.packages import ZipPackage, unpackLine
from MoinMoin.parser.text_moin_wiki import Parser as WikiParser
from MoinMoin.i18n import strings
i18n.strings = strings
from MoinMoin.Page import Page
from MoinMoin.util.dataset import TupleDataset, Column
from MoinMoin.widget.browser import DataBrowserWidget


def macro_ListPagePacks(macro):
    """
    lists all pages of LanguageSetup dependent for your language you get if help is wanted 
    """
    request = macro.request
    lang = request.lang or 'en'
    wiki_languages = sorted(i18n.wikiLanguages().keys())
    if lang not in wiki_languages:
        lang = 'en'

    lang_package_prefix =  i18n.wikiLanguages()[lang]['x-language-in-english']
    language_setup_page = 'LanguageSetup'
    all_pages = getattr(strings, 'all_pages')

    pagesets = list(strings.pagesets)
    pagesets.remove('all_pages')
    pagesets.remove('all_system_pages')
    pagesets = ['all_pages', 'all_system_pages'] + pagesets

    data = TupleDataset()
    data.columns = []
    data.columns.extend([Column("pagename", label="pagename")])
    for pagename in all_pages:
        row = []
        for ps in pagesets:
            help_us = ""
            footnote = ""
            lps = "%s_%s.zip" % (lang_package_prefix, ps)
            if pagename in getattr(strings, ps):
                if ps == 'all_pages' and not (lang == "en" or pagename in getattr(strings, "not_translated_system_pages")):
                    footnote = "[[http://master19.moinmo.in/CheckTranslation/FrontPage?action=CheckTranslation&pageset=%(pageset)s&language=%(lang)s|help translating]]" % {"pageset": ps,
                                                                                                                                                                            "lang": lang}
                    if AttachFile.exists(request, language_setup_page, lps):
                        packagefile = AttachFile.getFilename(request, language_setup_page, lps)
                        package = ZipPackage(request, packagefile)
                        scriptfile = package.getScript().split('\n')
                        tranlated_pages_for_this_set = [unpackLine(line)[2].strip() for line in 
                                                        scriptfile if line.startswith('ReplaceUnderlay')]
                        test_name = i18n.getText(pagename, request, lang).strip()
                        
                        if not test_name in tranlated_pages_for_this_set:
                            help_us = """not in your language "%s" translated <<FootNote(%s)>>""" % (lang_package_prefix, footnote)
                    else:
                        help_us = """not in your language "%s" translated <<FootNote(%s)>>""" % (lang_package_prefix)
                row.append(wikiutil.renderText(request, WikiParser, '(./) ' + help_us))
            else:
                row.append('')
        page = Page(request, pagename)
        link = page.link_to(request)
        data.addRow([link] + row)

    for key in pagesets:
        key = key.replace('_pages', '').replace('_', ' ')
        data.columns.extend([Column(key, label=key)])
        
    table = DataBrowserWidget(request)
    table.setData(data)
        
    html = ''.join(table.format(method='GET'))
    return html
 