# -*- coding: utf-8 -*-
""" Content rules handlers
"""
from plone.app.discussion import _


try:
    from plone.stringinterp.adapters import BaseSubstitution
except ImportError:
    class BaseSubstitution(object):
        """ Fallback class if plone.stringinterp is not available
        """

        def __init__(self, context, **kwargs):
            self.context = context

try:
    from plone.app.contentrules.handlers import execute
except ImportError:
    execute = lambda context, event: False


def execute_comment(event):
    """ Execute comment content rules
    """
    execute(event.object, event)


class CommentSubstitution(BaseSubstitution):
    """ Comment string substitution
    """

    def __init__(self, context, **kwargs):
        super(CommentSubstitution, self).__init__(context, **kwargs)

    @property
    def event(self):
        """ event that triggered the content rule
        """
        return self.context.REQUEST.get('event')

    @property
    def comment(self):
        """ Get changed inline comment
        """
        return self.event.comment


class Id(CommentSubstitution):
    """ Comment id string substitution
    """
    category = _(u'Comments')
    description = _(u'Comment id')

    def safe_call(self):
        """ Safe call
        """
        return getattr(self.comment, 'comment_id', u'')


class Text(CommentSubstitution):
    """ Comment text
    """
    category = _(u'Comments')
    description = _(u'Comment text')

    def safe_call(self):
        """ Safe call
        """
        return getattr(self.comment, 'text', u'')


class AuthorUserName(CommentSubstitution):
    """ Comment author user name string substitution
    """
    category = _(u'Comments')
    description = _(u'Comment author user name')

    def safe_call(self):
        """ Safe call
        """
        return getattr(self.comment, 'author_username', u'')


class AuthorFullName(CommentSubstitution):
    """ Comment author full name string substitution
    """
    category = _(u'Comments')
    description = _(u'Comment author full name')

    def safe_call(self):
        """ Safe call
        """
        return getattr(self.comment, 'author_name', u'')


class AuthorEmail(CommentSubstitution):
    """ Comment author email string substitution
    """
    category = _(u'Comments')
    description = _(u'Comment author email')

    def safe_call(self):
        """ Safe call
        """
        return getattr(self.comment, 'author_email', u'')
