from __future__ import annotations

import re
import socket


def magic_packet(mac: str) -> bytes:
    clean = re.sub(r"[^0-9a-fA-F]", "", mac)
    if len(clean) != 12:
        raise ValueError("MAC address tidak valid")
    return bytes.fromhex("FF" * 6 + clean * 16)


def send_wol(mac: str, broadcast: str = "255.255.255.255", port: int = 9) -> None:
    pkt = magic_packet(mac)
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        s.sendto(pkt, (broadcast, port))
        s.sendto(pkt, (broadcast, 7))
