from django.db.models import Q
from django.utils.decorators import classproperty
from alerts.modules.ef.ef_event import EFEventController
from alerts.modules.event_types import CRITICAL_PARAMETERS, PCIE

PROFILE_DESCRIPTIONS = {
    'B1': 'Si activó el evento gatillador "presencia de grietas en el muro. "',
    'C1': 'Se determina que las grietas detectadas ponen en riesgo la \
    integridad del muro. ',
    'C2': 'Se detectan grietas posteriores a un evento sísmico y se \
    determina que estas ponen en riesgo la integridad del muro. ',
    'C3': 'Se detectan grietas longitudinales posteriores a un deslizamiento \
    superficial que pone en riesgo la integridad del muro. ”',

}


class PresenciaGrietasController(EFEventController):
    name = "Presencia de grietas en el muro."

    event_type = CRITICAL_PARAMETERS

    visibility_groups = (
        "ef",
        "m1",
        "ef.m1_m2",
        "ef.m1_m2.presencia_grietas",
        "mine",
        "authority"
    )

    @classproperty
    def relevant_events(cls):
        group = cls.spread_object()
        return [
            cls.event_query(Q(canonical_name='.'.join([
                group.target.canonical_name,
                f'g-{group.canonical_name}',
                'ef-mvp.m2.parameters.integridad-externa.grietas',
                suffix
            ])), 1)
            for suffix in cls._relevant_events
        ]

    def result_state(self, ticket):
        if ticket.state == self.CLOSED_STATE:
            return {'level': 0, 'short_message': self.name}
        return {
            'level': self.get_level(ticket),
            'short_message': self.name,
            'message': PROFILE_DESCRIPTIONS.get(ticket.state, ''),
            "event_type": self.event_type,
            "parameter": PCIE
        }
