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


def inventory_synology_raid(info):
    for line in info:
        yield line[0], None


def check_synology_raid(item, _no_params, info):
    states = {
        "1": ("OK", 0),
        "2": ("repairing", 1),
        "3": ("migrating", 1),
        "4": ("expanding", 1),
        "5": ("deleting", 1),
        "6": ("creating", 1),
        "7": ("RAID syncing", 0),
        "8": ("RAID parity checking", 0),
        "9": ("RAID assembling", 1),
        "10": ("cancelling", 1),
        "11": ("degraded", 2),
        "12": ("crashed", 2),
        "13": ("scrubbing", 0),
        "14": ("RAID deploying", 0),
        "15": ("RAID undeploying", 0),
        "16": ("RAID mounting cache", 0),
        "17": ("RAID unmounting cache", 0),
        "18": ("RAID continue expanding", 1),
        "19": ("RAID converting", 0),
        "20": ("RAID migrating", 0),
        "21": ("RAID status unknown", 3),
    }
    for raid, state in info:
        if raid == item:
            message = "Status: " + states[state][0]
            return states[state][1], message


check_info["synology_raid"] = {
    "check_function": check_synology_raid,
    "inventory_function": inventory_synology_raid,
    "service_description": "RAID %s",
    "snmp_scan_function": synology_scan_function,
    "snmp_info": (
        ".1.3.6.1.4.1.6574.3.1.1",
        [
            2,  # raidName
            3,  # raidStatus
        ],
    ),
}
