# -*- coding: utf-8 -*-

from tracim.lib.utils.logger import logger
from tracim.models.auth import User
from tracim.models.data import Content


class INotifier(object):
    """
    Interface for Notifier instances
    """
    def __init__(self, config, current_user: User=None):
        pass

    def notify_content_update(self, content: Content):
        raise NotImplementedError


class NotifierFactory(object):

    @classmethod
    def create(cls, config, current_user: User=None) -> INotifier:
        if not config.EMAIL_NOTIFICATION_ACTIVATED:
            return DummyNotifier(config, current_user)
        return EmailNotifier(config, current_user)


class DummyNotifier(INotifier):
    send_count = 0

    def __init__(self, config, current_user: User=None):
        INotifier.__init__(config, current_user)
        logger.info(self, 'Instantiating Dummy Notifier')

    def notify_content_update(self, content: Content):
        type(self).send_count += 1
        logger.info(
            self,
            'Fake notifier, do not send notification for update of content {}'.format(content.content_id)  # nopep8
        )


class EmailNotifier(INotifier):
    # TODO - G.M [emailNotif] move and restore Email Notifier in another file.
    pass