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

# Example output:
# <<<win_bios:sep(58)>>>
# Manufacturer       : innotek GmbH
# Name               : Default System BIOS
# BIOSVersion        : {VBOX   - 1}
# ListOfLanguages    :
# PrimaryBIOS        : True
# ReleaseDate        : 20061201000000.000000+000
# SMBIOSBIOSVersion  : VirtualBox
# SMBIOSMajorVersion : 2
# SMBIOSMinorVersion : 5


def inv_win_bios(info):
    node = inv_tree("software.bios.")
    smbios_version = ""
    bios_version = ""
    for line in info:
        # Separator : seams not ideal. Some systems have : in the BIOS version
        if len(line) > 2:
            line = [line[0], ":".join(line[1:])]
        varname, value = line
        varname = re.sub(" *", "", varname)
        value = re.sub("^ ", "", value)
        if varname == "BIOSVersion":
            bios_version = value
        elif varname == "SMBIOSBIOSVersion":
            smbios_version = value
        elif varname == "SMBIOSMajorVersion":
            major_version = value
        elif varname == "SMBIOSMinorVersion":
            minor_version = value
        elif varname == "ReleaseDate":
            # The ReleaseDate property indicates the release date of the
            # Win32 BIOS in the Coordinated Universal Time (UTC) format
            # of YYYYMMDDHHMMSS.MMMMMM(+-)OOO.
            value = value.replace("*", "0")
            node["date"] = int(time.mktime(time.strptime(value.split(".")[0], "%Y%m%d%H%M%S")))
        elif varname == "Manufacturer":
            node["vendor"] = value
        elif varname == "Name":
            node["model"] = value

    if smbios_version:
        node["version"] = smbios_version + " " + major_version + "." + minor_version
    else:
        node["version"] = bios_version


inv_info["win_bios"] = {
    "inv_function": inv_win_bios,
}
