"""normalize.py

Helper per normalizzare i MAC address in due formati:

- compact: 12 hex uppercase senza separatori (es: AC233FC1DD3C)
- colon:   6 byte separati da ":" (es: AC:23:3F:C1:DD:3C)

Nota: nel progetto usiamo **compact** come chiave interna per fare matching tra:
- gateway.csv (spesso con i ":")
- topic MQTT (publish_out/<gw> in genere senza ":")
- payload JSON (mac beacon/gateway spesso senza ":")

Il formato colon rimane utile solo per *rendering* (es: header CSV).
"""

from __future__ import annotations

import re

_HEX_ONLY = re.compile(r"[^0-9A-Fa-f]")


def mac_to_compact(mac: object) -> str:
    """Ritorna 12 hex uppercase senza separatori."""
    if mac is None:
        return ""
    s = _HEX_ONLY.sub("", str(mac)).upper()
    if len(s) == 12:
        return s
    if len(s) > 12:
        # se arriva qualcosa di più lungo (es. UUID), prendiamo gli ultimi 12
        return s[-12:]
    return s


def compact_to_colon(mac12: object) -> str:
    """Converte 'AC233FC1DD3C' -> 'AC:23:3F:C1:DD:3C'."""
    s = mac_to_compact(mac12)
    if len(s) != 12:
        return s
    return ":".join(s[i : i + 2] for i in range(0, 12, 2))


def norm_mac(mac: object) -> str:
    """Alias storico: ritorna il formato con ':'."""
    return compact_to_colon(mac)
