#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.


def inventory_apc_inputs(info):
    if len(info) > 0:
        inventory = []
        for line in info:
            if line[2] not in ["3", "4"]:
                inventory.append((line[0], {"state": line[2]}))
        return inventory


def check_apc_inputs(item, params, info):
    states = {
        "1": "closed",
        "2": "open",
        "3": "disabled",
        "4": "not applicable",
    }
    alarm_states = {
        "1": "normal",
        "2": "warning",
        "3": "critical",
        "4": "not applicable",
    }
    for name, _location, state, alarm_status in info:
        if name == item:
            if alarm_status in ["2", "4"]:
                check_state = 1
            elif alarm_status == "3":
                check_state = 2
            elif alarm_status == "1":
                check_state = 0

            messages = ["State is %s" % alarm_states[alarm_status]]

            if params["state"] != state:
                check_state = max(check_state, 1)
                messages.append(
                    "Port state Change from %s to %s" % (states[params["state"]], states[state])
                )

            return check_state, ", ".join(messages)


check_info["apc_inputs"] = {
    "inventory_function": inventory_apc_inputs,
    "check_function": check_apc_inputs,
    "service_description": "Input %s",
    "snmp_scan_function": lambda oid: oid(".1.3.6.1.2.1.1.2.0").startswith(".1.3.6.1.4.1.318.1.3"),
    "snmp_info": (
        ".1.3.6.1.4.1.318.1.1.25.2.2.1",
        [
            3,  # Port Name
            4,  # Location
            5,  # CurrentState
            6,  # AlarmStatus
        ],
    ),
}
