from django.apps import AppConfig
from django.conf import settings
from django.utils.translation import gettext_lazy as _


class EventLogConfig(AppConfig):
    name = "eventlog"
    verbose_name = "EventLog"

    # List of event types to be used in events. A list of dictionaries
    # in the format::
    #
    #     {
    #         'name': 'info',      # The method name.
    #         'label': _('Info'),  # Human readable label
    #         'color': None,       # Foreground Hex color used in the Admin changelist. Optional.
    #         'bgcolor': None,     # Background Hex color used in the Admin changelist. Optional.
    #     }
    #
    # Method names must be lowercase and only contain strings, numbers and
    # underscores, but must not start with either a number or underscore.
    # The max length is 50 characters.
    #
    # This is OK:  yolo, hello_world, jerry123
    # This is NOK: _yolo, 1pineappleplease,
    # fmt: off
    event_types = {
        "info": {
            "label": _("Info"),
            "color": None,
            "bgcolor": None,
        },
        "warning": {
            "label": _("Warning"),
            "color": None,
            "bgcolor": None,
        },
        "error": {
            "label": _("Error"),
            "color": "red",
            "bgcolor": None,
        },
        "critical": {
            "label": _("Critical"),
            "color": "white",
            "bgcolor": "red",
        },
    }
    # fmt: on

    # -- Email Notification Settings

    # Fail silently if the email server does not exist or respond
    email_fail_silently = False

    # From email address used when sending notifications
    email_from = settings.DEFAULT_FROM_EMAIL

    # Email subject and text body templates. This needs to be a standard
    # Python string. You may use 'new style' format variables here.
    #
    # {type}      Event type, such as "Info" or "Warning".
    # {date}      The date and time the event was triggered.
    # {message}   The message sent with the event.
    # {initiator} The initiator string (optional)
    email_subject_template = _("Event Log: {type}")
    email_template = _("The Event was {type} on {date}\n\n{message}\n\n-- {initiator}")

    def get_event_types(self):
        """
        All code calls this method and not `self.event_types`, so you can
        programmatically create event types, if required..
        """
        return self.event_types
