__filename__ = "webapp_moderation.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.2.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
__module_group__ = "Moderation"
import os
from utils import isAccountDir
from utils import getFullDomain
from utils import isEditor
from utils import loadJson
from utils import getNicknameFromActor
from utils import getDomainFromActor
from utils import getConfigParam
from posts import downloadFollowCollection
from posts import getPublicPostInfo
from posts import isModerator
from webapp_timeline import htmlTimeline
# from webapp_utils import getPersonAvatarUrl
from webapp_utils import getContentWarningButton
from webapp_utils import htmlHeaderWithExternalStyle
from webapp_utils import htmlFooter
from blocking import isBlockedDomain
from blocking import isBlocked
from session import createSession
def htmlModeration(cssCache: {}, defaultTimeline: str,
                   recentPostsCache: {}, maxRecentPosts: int,
                   translate: {}, pageNumber: int, itemsPerPage: int,
                   session, baseDir: str, wfRequest: {}, personCache: {},
                   nickname: str, domain: str, port: int, inboxJson: {},
                   allowDeletion: bool,
                   httpPrefix: str, projectVersion: str,
                   YTReplacementDomain: str,
                   showPublishedDateOnly: bool,
                   newswire: {}, positiveVoting: bool,
                   showPublishAsIcon: bool,
                   fullWidthTimelineButtonHeader: bool,
                   iconsAsButtons: bool,
                   rssIconAtTop: bool,
                   publishButtonAtTop: bool,
                   authorized: bool, moderationActionStr: str,
                   theme: str, peertubeInstances: [],
                   allowLocalNetworkAccess: bool,
                   textModeBanner: str,
                   accessKeys: {}, systemLanguage: str) -> str:
    """Show the moderation feed as html
    This is what you see when selecting the "mod" timeline
    """
    return htmlTimeline(cssCache, defaultTimeline,
                        recentPostsCache, maxRecentPosts,
                        translate, pageNumber,
                        itemsPerPage, session, baseDir, wfRequest, personCache,
                        nickname, domain, port, inboxJson, 'moderation',
                        allowDeletion, httpPrefix, projectVersion, True, False,
                        YTReplacementDomain, showPublishedDateOnly,
                        newswire, False, False, positiveVoting,
                        showPublishAsIcon, fullWidthTimelineButtonHeader,
                        iconsAsButtons, rssIconAtTop, publishButtonAtTop,
                        authorized, moderationActionStr, theme,
                        peertubeInstances, allowLocalNetworkAccess,
                        textModeBanner, accessKeys, systemLanguage)
def htmlAccountInfo(cssCache: {}, translate: {},
                    baseDir: str, httpPrefix: str,
                    nickname: str, domain: str, port: int,
                    searchHandle: str, debug: bool,
                    systemLanguage: str) -> str:
    """Shows which domains a search handle interacts with.
    This screen is shown if a moderator enters a handle and selects info
    on the moderation screen
    """
    msgStr1 = 'This account interacts with the following instances'
    infoForm = ''
    cssFilename = baseDir + '/epicyon-profile.css'
    if os.path.isfile(baseDir + '/epicyon.css'):
        cssFilename = baseDir + '/epicyon.css'
    instanceTitle = \
        getConfigParam(baseDir, 'instanceTitle')
    infoForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
    searchNickname = getNicknameFromActor(searchHandle)
    searchDomain, searchPort = getDomainFromActor(searchHandle)
    searchHandle = searchNickname + '@' + searchDomain
    searchActor = \
        httpPrefix + '://' + searchDomain + '/users/' + searchNickname
    infoForm += \
        '
\n'
    usersPath = '/users/' + nickname + '/accountinfo'
    ctr = 1
    for postDomain, blockedPostUrls in domainDict.items():
        infoForm += '
' + \
            postDomain + '  '
        if isBlockedDomain(baseDir, postDomain):
            blockedPostsLinks = ''
            urlCtr = 0
            for url in blockedPostUrls:
                if urlCtr > 0:
                    blockedPostsLinks += '
'
                blockedPostsLinks += \
                    '
' + \
                    url + ' '
                urlCtr += 1
            blockedPostsHtml = ''
            if blockedPostsLinks:
                blockNoStr = 'blockNumber' + str(ctr)
                blockedPostsHtml = \
                    getContentWarningButton(blockNoStr,
                                            translate, blockedPostsLinks)
                ctr += 1
            infoForm += \
                '
'
            infoForm += '' + \
                translate['Unblock'] + '   ' + \
                blockedPostsHtml + '\n'
        else:
            infoForm += \
                '
'
            if postDomain != domain:
                infoForm += '' + \
                    translate['Block'] + '  \n'
        infoForm += '
\n'
    infoForm += '
\n'
        infoForm += '
' + translate['Blocked following'] + ' \n'
        infoForm += \
            '
' + \
            translate['Receives posts from the following accounts'] + \
            ':
\n'
        for actor in blockedFollowing:
            followingNickname = getNicknameFromActor(actor)
            followingDomain, followingPort = getDomainFromActor(actor)
            followingDomainFull = \
                getFullDomain(followingDomain, followingPort)
            infoForm += '
' + \
                followingNickname + '@' + followingDomainFull + \
                ' \n'
        infoForm += '
\n'
        infoForm += '
' + translate['Blocked followers'] + ' \n'
        infoForm += \
            '
' + \
            translate['Sends out posts to the following accounts'] + \
            ':
\n'
        for actor in blockedFollowers:
            followerNickname = getNicknameFromActor(actor)
            followerDomain, followerPort = getDomainFromActor(actor)
            followerDomainFull = getFullDomain(followerDomain, followerPort)
            infoForm += '
' + \
                followerNickname + '@' + followerDomainFull + ' \n'
        infoForm += '
\n'
            infoForm += '
' + translate['Word frequencies'] + ' \n'
            wordSwarm = ''
            ctr = 0
            for word, count in wordFrequency.items():
                if count >= minimumWordCount:
                    if ctr > 0:
                        wordSwarm += ' '
                    if count < maxCount - int(maxCount / 4):
                        wordSwarm += word
                    else:
                        if count != maxCount:
                            wordSwarm += '' + word + ' '
                        else:
                            wordSwarm += '' + word + ' ' + translate['Show Accounts']
        infoForm += ' \n'
    infoForm += '
\n'
    infoForm += '
\n'
            infoForm += '  ' + \
                translate['Suspended accounts'] + ' '
            infoForm += '  
\n'
            infoShown = True
    blockingFilename = baseDir + '/accounts/blocking.txt'
    if os.path.isfile(blockingFilename):
        with open(blockingFilename, 'r') as f:
            blockedStr = f.read()
            infoForm += '\n'
            infoForm += \
                '  ' + \
                translate['Blocked accounts and hashtags'] + ' '
            infoForm += \
                '  
\n'
            infoShown = True
    filtersFilename = baseDir + '/accounts/filters.txt'
    if os.path.isfile(filtersFilename):
        with open(filtersFilename, 'r') as f:
            filteredStr = f.read()
            infoForm += '\n'
            infoForm += \
                '  ' + \
                translate['Filtered words'] + ' '
            infoForm += \
                '  \n'
            infoForm += '
\n'
            infoShown = True
    if not infoShown:
        infoForm += \
            '' + \
            translate[msgStr2] + \
            '