"""
Log forwarding helpers.

DECNET is agnostic to what receives logs — any TCP/UDP listener works
(Logstash, Splunk, Graylog, netcat, etc.).

Each service plugin handles the actual forwarding by injecting the
LOG_TARGET environment variable into its container. This module provides
shared utilities for validating and parsing the log_target string.
"""

import socket

from decnet.telemetry import traced as _traced


def parse_log_target(log_target: str) -> tuple[str, int]:
    """
    Parse "ip:port" into (host, port).
    Raises ValueError on bad format.
    """
    parts = log_target.rsplit(":", 1)
    if len(parts) != 2 or not parts[1].isdigit():
        raise ValueError(f"Invalid log_target '{log_target}'. Expected format: ip:port")
    return parts[0], int(parts[1])


@_traced("logging.probe_log_target")
def probe_log_target(log_target: str, timeout: float = 2.0) -> bool:
    """
    Return True if the log target is reachable (TCP connect succeeds).
    Non-fatal — just used to warn the user before deployment.
    """
    try:
        host, port = parse_log_target(log_target)
        with socket.create_connection((host, port), timeout=timeout):
            return True
    except (OSError, ValueError):
        return False
