__filename__ = "semantic.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.1.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"


def isAccusatory(content: str, translate: {}, threshold=3) -> bool:
    """Indicates whether the given content is an accusatory post
    """
    words = ('you', 'your', "you're", 'if you', 'you are')

    if translate:
        wordsTranslated = []
        for wrd in words:
            translated = translate[wrd]
            if '|' not in translated:
                if translated not in wordsTranslated:
                    wordsTranslated.append(translated)
            else:
                # handle differing genders
                words2 = translated.split('|')
                for wrd2 in words2:
                    if wrd2.strip() not in wordsTranslated:
                        wordsTranslated.append(translated)
    else:
        wordsTranslated = words

    contentLower = content.lower()
    ctr = 0
    for wrd in wordsTranslated:
        ctr += contentLower.count(wrd + ' ')
    if ctr >= threshold:
        return True
    return False


def labelAccusatoryPost(postJsonObject: {}, translate: {}, threshold=3):
    """If a post is accusatory and it doesn't mention anyone
    specific and isn't a reply and it doesn't have a content
    warning then add a default 'accusatory' content warning
    """
    if not postJsonObject.get('object'):
        return
    if not isinstance(postJsonObject['object'], dict):
        return
    if not postJsonObject['object'].get('content'):
        return
    if not postJsonObject['object'].get('type'):
        return
    if postJsonObject['object']['type'] == 'Article':
        return
    if postJsonObject['object'].get('inReplyTo'):
        return
    if not isinstance(postJsonObject['object']['content'], str):
        return
    if '@' in postJsonObject['object']['content']:
        return
    if not isAccusatory(postJsonObject['object']['content'],
                        translate, threshold):
        return
    cwStr = translate['Accusatory']
    if postJsonObject['object'].get('summary'):
        if cwStr not in postJsonObject['object']['summary']:
            postJsonObject['object']['summary'] = \
                cwStr + ', ' + postJsonObject['object']['summary']
    else:
        postJsonObject['object']['summary'] = cwStr
    postJsonObject['object']['sensitive'] = True