import json
import logging
import os
import pymsteams

try:
    from alerta.plugins import app  # alerta >= 5.0
except ImportError:
    from alerta.app import app  # alerta < 5.0
from alerta.plugins import PluginBase

LOG = logging.getLogger('alerta.plugins.msteams')

MS_TEAMS_WEBHOOK_URL = os.environ.get('MS_TEAMS_WEBHOOK_URL') or app.config.get('MS_TEAMS_WEBHOOK_URL')
MS_TEAMS_SUMMARY_FMT = os.environ.get('MS_TEAMS_SUMMARY_FMT') or app.config.get('MS_TEAMS_SUMMARY_FMT', None)  # Message summary format
DASHBOARD_URL = os.environ.get('DASHBOARD_URL') or app.config.get('DASHBOARD_URL', '')

try:
    from jinja2 import Template
except Exception as e:
    LOG.error('MS Teams: ERROR - Jinja template error: %s, template functionality will be unavailable', e)


class SendConnectorCardMessage(PluginBase):

    def pre_receive(self, alert):
        return alert

    def post_receive(self, alert):

        if alert.repeat:
            return

        if MS_TEAMS_SUMMARY_FMT:
            try:
                template = Template(MS_TEAMS_SUMMARY_FMT)
            except Exception as e:
                LOG.error('MS Teams: ERROR - Template init failed: %s', e)
                return

            try:
                template_vars = {
                    'alert': alert,
                    'config': app.config
                }
                summary = template.render(**template_vars)
            except Exception as e:
                LOG.error('MS Teams: ERROR - Template render failed: %s', e)
                return
        else:
            summary = ('<b>[{status}] {environment} {service} {severity} - <i>{event} on {resource}</i></b>').format(
                status=alert.status.capitalize(),
                environment=alert.environment.upper(),
                service=','.join(alert.service),
                severity=alert.severity.capitalize(),
                event=alert.event,
                resource=alert.resource
            )
            url = "%s/#/alert/%s" % (DASHBOARD_URL, alert.id)
            
        if alert.severity == 'critical':
            color = "D8122A"
        elif alert.severity == 'major':
            color = "EA680F"
        elif alert.severity == 'minor':
            color = "FFBE1E"
        elif alert.severity == 'warning':
            color = "BA2222"
        else:
            color = "00AA5A"

        LOG.debug('MS Teams payload: %s', summary)

        try:
            msTeamsMessage = pymsteams.connectorcard(MS_TEAMS_WEBHOOK_URL)
            msTeamsMessage.title(summary)
            msTeamsMessage.text(alert.text)
            msTeamsMessage.addLinkButton("Open in Alerta", url)
            msTeamsMessage.color(color)
            msTeamsMessage.send()
        except Exception as e:
            raise RuntimeError("MS Teams: ERROR - %s", e)

    def status_change(self, alert, status, text):
        return