# By: Riasat Ullah
# This file contains all constants and functions related to the Zabbix integration.

from utils import constants

# Zabbix variables
var_alertmessage = 'alertmessage'
var_eventack = 'eventack'
var_eventid = 'eventid'
var_eventname = 'eventname'
var_eventsource = 'eventsource'
var_eventupdate = 'eventupdate'
var_eventvalue = 'eventvalue'
var_hostname = 'hostname'
var_severity = 'severity'
var_triggerid = 'triggerid'

# Zabbix parameter values
yes_event_ack = 'Yes'

# Zabbix severity to TaskCall urgency mapping.
severity_mapping = {
    'Not classified': constants.minor_urgency,
    'Information': constants.minor_urgency,
    'Warning': constants.low_urgency,
    'Average': constants.medium_urgency,
    'High': constants.high_urgency,
    'Disaster': constants.critical_urgency
}

# Zabbix event types classified by TaskCall. These are strictly internal and issued by TaskCall.
zb_tc_recovery_event = 'Recovery'
zb_tc_trigger_event = 'Trigger'
zb_tc_update_event = 'Update'


def get_event_type(event_value, event_update, event_source):
    '''
    Figures out the type of event contained in the payload.
    :param event_value: 'eventvalue' sent by Zabbix
    :param event_update: 'eventupdate' sent by Zabbix
    :param event_source: 'eventsource' sent by Zabbix
    :return: (str) -> TRIGGER, ACKNOWLEDGE, RESOLVE
    '''
    if (event_value == '1' and event_update == '0') or event_source != '0':
        return zb_tc_trigger_event
    elif event_value == '1' and event_update == '1':
        return zb_tc_update_event
    elif event_value == '0':
        return zb_tc_recovery_event
    else:
        raise ValueError('Unknown event type received. Aborting process.')
