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


def check_sql_arguments(params):
    args = []

    if "host" in params:
        args += ["--hostname=%s" % params["host"]]
    else:
        args += ["--hostname=$HOSTADDRESS$"]

    args.append("--dbms=%s" % params["dbms"])
    args.append("--name=%s" % params["name"])
    args.append("--user=%s" % params["user"])
    args.append(passwordstore_get_cmdline("--password=%s", params["password"]))

    if "port" in params:
        args.append("--port=%s" % params["port"])

    if "procedure" in params:
        if "procedure" in params and "useprocs" in params["procedure"]:
            args.append("--procedure")
            if "input" in params["procedure"]:
                args.append("--inputvars=%s" % params["procedure"]["input"])

    if "levels" in params:
        upper = params["levels"]
    else:
        upper = "", ""

    if "levels_low" in params:
        lower = params["levels_low"]
    else:
        lower = "", ""

    if "perfdata" in params:
        if (metrics := params.get("perfdata")) is not None:
            args.append(f"--metrics={metrics}")

    if "levels" in params or "levels_low" in params:
        warn_low, crit_low = lower
        warn_high, crit_high = upper
        args.append("-w%s:%s" % (warn_low, warn_high))
        args.append("-c%s:%s" % (crit_low, crit_high))

    if isinstance(params["sql"], tuple):
        sql_tmp = params["sql"][-1]
    else:
        sql_tmp = params["sql"]

    args.append("%s" % sql_tmp.replace("\n", r"\n").replace(";", r"\;"))

    return args


active_check_info["sql"] = {
    "command_line": "check_sql $ARG1$",
    "argument_function": check_sql_arguments,
    "service_description": lambda args: args["description"],
    "has_perfdata": True,
}
