#!/usr/bin/env python3
# -*- encoding: utf-8; py-indent-offset: 4 -*-

"""Show the cached service labels for all interfaces of one host."""

from __future__ import annotations

import argparse
from datetime import datetime
from labelpicker_ng.service_labels import ServiceLabels


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Service-Labels eines Hosts aus der Labelpicker-Pickle-Datei anzeigen.",
    )
    parser.add_argument("hostname", help="Name des Checkmk-Hosts")
    return parser.parse_args()


def main() -> None:
    host_name = parse_args().hostname
    service_labels = ServiceLabels.from_config_file()

    host_cache = service_labels._data.get(host_name)
    if not isinstance(host_cache, dict):
        raise SystemExit(f"Keine Service-Labels für Host {host_name!r} gefunden.")

    printed_label = False
    for interface_name in sorted(host_cache):
        labels = service_labels.get_interface_labels(host_name, interface_name)
        if not labels:
            continue

        printed_label = True
        print(interface_name)
        for label, value in sorted(labels.items()):
            state = host_cache[interface_name].get(label, {})
            last_seen = state.get("last_seen") if isinstance(state, dict) else None
            last_seen_text = (
                datetime.fromtimestamp(last_seen).strftime("%Y-%m-%d %H:%M:%S")
                if isinstance(last_seen, int)
                else "-"
            )
            print(f"\t{label}:{value}\t\t{state.get('current', False)}\t{last_seen_text}")

    if not printed_label:
        print(f"Keine aktiven Service-Labels für Host {host_name!r} gefunden.")

if __name__ == "__main__":
    main()
