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

# <<<rds_licenses:sep(44)>>>
# KeyPackId,Description,KeyPackType,ProductType,ProductVersion,ProductVersionID,TotalLicenses,IssuedLi...
# 13,A02-6.00-S,4,0,Windows Server 2008 oder Windows Server 2008 R2,2,-1,100,-1,20380119031407.000000-000
# 2,A02-5.00-EX,6,3,Windows 2000 Server,0,-1,0,-1,20351231230000.000000-000
# 3,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,250,250,0,20230209121549.000000-000
# 14,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,1050,731,319,20380101081108.000000-000
# 16,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,50,23,27,20380101150128.000000-000
# 17,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,50,18,32,20380101110453.000000-000
# 18,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,65,22,43,20380101083530.000000-000
# 19,A02-6.00-S,2,0,Windows Server 2008 oder Windows Server 2008 R2,2,600,0,600,20380101083248.000000-000
# 4,C50-6.02-S,2,1,Windows Server 2012,4,300,0,300,20380101000000.000000-000
# 3,C50-10.01-S,5,1,Windows Server 2019,6,2000,1,1999,20380101093636.000000-000

# Insert any new keys here
# https://msdn.microsoft.com/en-us/library/aa383803%28v=vs.85%29.aspx#properties
rds_licenses_product_versionid_map = {
    "6": "Windows Server 2019",
    "5": "Windows Server 2016",
    "4": "Windows Server 2012",
    "3": "Windows Server 2008 R2",
    "2": "Windows Server 2008"
    # 1    Not supported.
    # 0    Not supported.
}


def parse_rds_licenses(info):
    parsed = {}
    if not info:
        return parsed
    headers = info[0]
    for line in info[1:]:
        data = dict(zip(headers, line))
        version_id = data.get("ProductVersionID")
        if version_id not in rds_licenses_product_versionid_map:
            continue
        version = rds_licenses_product_versionid_map[version_id]
        parsed.setdefault(version, [])
        parsed[version].append(data)
    return parsed


@get_parsed_item_data
def check_rds_licenses(item, params, data):
    total = 0
    used = 0
    for pack in data:
        pack_total = int(pack.get("TotalLicenses"))
        pack_issued = int(pack.get("IssuedLicenses"))
        total += pack_total
        used += pack_issued

    return license_check_levels(total, used, params)


check_info["rds_licenses"] = {
    "parse_function": parse_rds_licenses,
    "inventory_function": discover(),
    "check_function": check_rds_licenses,
    "service_description": "RDS Licenses %s",
    "group": "rds_licenses",
    "has_perfdata": True,
}
