#!/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.

# NOTE: Careful when replacing the *-import below with a more specific import. This can cause
# problems because it might remove variables from the check-context which are necessary for
# resolving legacy discovery results such as [("SUMMARY", "diskstat_default_levels")]. Furthermore,
# it might also remove variables needed for accessing discovery rulesets.
from cmk.base.check_legacy_includes.temperature import *  # pylint: disable=wildcard-import,unused-wildcard-import


def check_blade_bx_temp(item, params, info):
    blade_bx_status = {
        1: "unknown",
        2: "sensor-disabled",
        3: "ok",
        4: "sensor-faild",
        5: "warning-temp",
        6: "critical-temp",
        7: "not-available",
    }
    for _index, status, descr, level_warn, level_crit, temp, crit_react in info:
        status = saveint(status)
        level_crit = saveint(level_crit)
        level_warn = saveint(level_warn)
        temp = saveint(temp)
        if descr != item:
            # wrong item
            continue

        statuscode, message, perfdata = check_temperature(
            temp, params, "blade_bx_temp_%s" % item, dev_levels=(level_warn, level_crit)
        )

        if crit_react != "2":
            return (2, "Temperature not present or poweroff", perfdata)
        if status != 3:
            return (2, "Status is %s" % blade_bx_status.get(status, 1), perfdata)
        return statuscode, message, perfdata

    return (3, "Device %s not found in SNMP data" % item, [])


def inventory_blade_bx_temp(info):
    for line in info:
        if int(line[1]) != 7:
            yield line[2], None


def scan_blade_bx_temp(oid):
    return (
        "BX600" in oid(".1.3.6.1.2.1.1.1.0")
        or oid(".1.3.6.1.2.1.1.2.0") == ".1.3.6.1.4.1.7244.1.1.1"
    )


check_info["blade_bx_temp"] = {
    "check_function": check_blade_bx_temp,
    "inventory_function": inventory_blade_bx_temp,
    "service_description": "Temperature Blade %s",
    "has_perfdata": True,
    "snmp_info": (
        ".1.3.6.1.4.1.7244.1.1.1.3.4.1.1",
        [
            1,  # index
            2,  # status
            3,  # desc
            4,  # level warn
            5,  # level crit
            6,  # temp
            7,  # crit react
        ],
    ),
    "snmp_scan_function": scan_blade_bx_temp,
    "group": "temperature",
}
