from __future__ import annotations

import logging
from typing import Dict

logger = logging.getLogger(__name__)


class Alert:
    EMOJIS = {"critical": "🔥", "warning": "⚠️", "resolved": "🥦"}
    COLORS = {"critical": "dc3545", "warning": "ffc107", "resolved": "33cc33"}

    def __init__(
        self,
        id: str,
        url: str,
        firing: bool = True,
        labels: Dict[str, str] = None,
        annotations: Dict[str, str] = None,
    ):
        self.id = id
        self.url = url
        self.firing = firing

        if labels is None:
            self.labels = {}
        else:
            self.labels = labels

        if annotations is None:
            self.annotations = {}
        else:
            self.annotations = annotations

        if self.firing:
            self.status = self.labels["severity"]
        else:
            self.status = "resolved"

    @staticmethod
    def from_dict(data: Dict) -> Alert:
        return Alert(
            id=data["fingerprint"],
            url=data["generatorURL"],
            firing=data["status"] == "firing",
            labels=data["labels"],
            annotations=data["annotations"],
        )

    @property
    def emoji(self) -> str:
        return self.EMOJIS[self.status]

    @property
    def color(self) -> str:
        return self.COLORS[self.status]

    def plaintext(self) -> str:
        alertname = self.labels["alertname"]
        description = self.annotations["description"]
        return f"[{self.emoji} {self.status.upper()}] {alertname}: {description}"

    def html(self) -> str:
        alertname = self.labels["alertname"]
        job = self.labels["job"]
        description = self.annotations["description"]
        return (
            f"<font color='#{self.color}'><b>[{self.emoji} {self.status.upper()}]</b></font> "
            f"<a href='{self.url}'>{alertname}</a> ({job})<br/>{description}"
        )