#!/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.stormshield import *  # pylint: disable=wildcard-import,unused-wildcard-import


def parse_stormshield_disk(info):
    standalone, cluster = info
    parsed = []
    if not cluster and not standalone:
        return []
    if cluster != []:
        for item in cluster:
            new_info = []
            index = item[0].split(".")[0]
            new_info.append(index)
            new_info.extend(item[1:])
            parsed.append(new_info)
        return parsed

    new_info = []
    new_info.append("0")
    new_info.extend(standalone[0])
    parsed.append(new_info)
    return parsed


def inventory_stormshield_disk(parsed):
    for disk in parsed:
        clusterindex = disk[0]
        yield clusterindex, {}


def check_stormshield_disk(item, params, parsed):
    for disk in parsed:
        clusterindex, index, name, selftest, israid, raidstatus, position = disk
        if item == clusterindex:
            infotext = "Device Index %s, Selftest: %s, Device Mount Point Name: %s" % (
                index,
                selftest,
                name,
            )
            if selftest != "PASSED":
                status = 1
            else:
                status = 0
            if israid != "0":
                infotext = infotext + ", Raid active, Raid Status %s, Disk Position %s" % (
                    raidstatus,
                    position,
                )
            yield status, infotext


check_info["stormshield_disk"] = {
    "parse_function": parse_stormshield_disk,
    "inventory_function": inventory_stormshield_disk,
    "check_function": check_stormshield_disk,
    "service_description": "Disk %s",
    "snmp_info": [
        (
            ".1.3.6.1.4.1.11256.1.11.11.1",
            [
                0,
                "1",  # snsNodeDiskIndex
                "2",  # snsDiskEntryDiskName
                "3",  # snsDiskEntrySmartResult
                "4",  # snsDiskEntryIsRaid
                "5",  # snsDiskEntryRaidStatus
                "6",  # snsDiskEntryPosition
            ],
        ),
        (
            ".1.3.6.1.4.1.11256.1.10.5.1",
            [
                0,
                "1",  # snsNodeDiskIndex
                "2",  # snsDiskEntryDiskName
                "3",  # snsDiskEntrySmartResult
                "4",  # snsDiskEntryIsRaid
                "5",  # snsDiskEntryRaidStatus
                "6",  # snsDiskEntryPosition
            ],
        ),
    ],
    "snmp_scan_function": stormshield_scan_function,
}
