"""HAL9002 parameter handling for the special agent"""

from collections.abc import Iterable

from pydantic import BaseModel

from cmk.server_side_calls.v1 import (
    HostConfig,
    Secret,
    SpecialAgentCommand,
    SpecialAgentConfig,
)


class Hal9002Params(BaseModel):
    """defines all needed parameters for the special agent"""

    hostname: str | None = None
    username: str | None = None
    password: Secret | None = None


def agent_hal9002_arguments(
    params: Hal9002Params, _host_config: HostConfig
) -> Iterable[SpecialAgentCommand]:
    """replaces the argument_thingy from the old API"""
    command_arguments: list[str | Secret] = []
    if params.hostname is not None:
        command_arguments += ["--hostname", params.hostname]
    if params.username is not None:
        command_arguments += ["--username", params.username]
    if params.password is not None:
        command_arguments += ["--password", params.password.unsafe()]
    yield SpecialAgentCommand(command_arguments=command_arguments)


special_agent_hal9002 = SpecialAgentConfig(
    # name must be the filename of the executable for the special agent (without prefix)
    name="hal9002",
    parameter_parser=Hal9002Params.model_validate,
    commands_function=agent_hal9002_arguments,
)