#!/usr/bin/env python3
"""
defines the form for typing in all needed levels
regarding number of domains, mailboxes and global message count
"""

from cmk.rulesets.v1 import Help, Title
from cmk.rulesets.v1.form_specs import (
    DictElement,
    Dictionary,
    SimpleLevels,
    LevelDirection,
    DefaultValue,
    Integer,
)
from cmk.rulesets.v1.rule_specs import (
    CheckParameters,
    Topic,
    HostCondition,
)


def _parameter_form() -> Dictionary:
    return Dictionary(
        title=Title("Levels for global Mailcow information"),
        help_text=Help("Checking Mailcow systems via API"),
        elements={
            "levels_num_domains": DictElement(
                parameter_form=SimpleLevels(
                    title=Title("Levels for number of email domains"),
                    form_spec_template=Integer(),
                    level_direction=LevelDirection.UPPER,
                    prefill_fixed_levels=DefaultValue(value=(100, 200)),
                ),
                required=True,
            ),
            "levels_num_mailboxes": DictElement(
                parameter_form=SimpleLevels(
                    title=Title("Levels for number of mailboxes"),
                    form_spec_template=Integer(),
                    level_direction=LevelDirection.UPPER,
                    prefill_fixed_levels=DefaultValue(value=(500, 1000)),
                ),
                required=True,
            ),
            "levels_num_global_messages": DictElement(
                parameter_form=SimpleLevels(
                    title=Title("Levels for number of messages"),
                    form_spec_template=Integer(),
                    level_direction=LevelDirection.UPPER,
                    prefill_fixed_levels=DefaultValue(value=(100_000, 250_000)),
                ),
                required=True,
            ),
        },
    )


rule_spec_mailcow_info = CheckParameters(
    name="mailcow_info",
    title=Title("Mailcow global levels"),
    topic=Topic.APPLICATIONS,
    parameter_form=_parameter_form,
    condition=HostCondition(),
)