"""
DNS interne — Windows : écrit le bloc Meshamoto dans
%SystemRoot%\\System32\\drivers\\etc\\hosts. Écriture directe (pas de mécanisme
d'élévation dédié comme pkexec côté Linux) : le client Windows tourne déjà en
administrateur pour piloter wireguard.exe/netsh (voir meshamoto.spec,
`uac_admin=True`), donc l'écriture échoue avec un PermissionError explicite si ce
n'est pas le cas plutôt que d'échouer silencieusement.
"""

from __future__ import annotations

import logging
import os
from pathlib import Path

logger = logging.getLogger("meshamoto-client.hosts.windows")

HOSTS_FILE_PATH = Path(os.environ.get("SystemRoot", r"C:\Windows")) / "System32" / "drivers" / "etc" / "hosts"


def read_hosts_content() -> str:
    return HOSTS_FILE_PATH.read_text(encoding="utf-8")


def apply_hosts_content(new_content: str) -> None:
    try:
        HOSTS_FILE_PATH.write_text(new_content, encoding="utf-8", newline="\n")
    except PermissionError as exc:
        raise PermissionError(
            "Impossible de modifier le fichier hosts Windows. Relancez Meshamoto en "
            "administrateur (clic droit -> Exécuter en tant qu'administrateur)."
        ) from exc
    logger.info("Fichier hosts mis à jour (%s)", HOSTS_FILE_PATH)
