"""
Ouvre l'explorateur de fichiers natif de l'OS sur le partage réseau (SMB/Samba) d'un
pair — un simple lanceur de commande, rien de plus. Meshamoto ne participe jamais au
partage ou au transfert de fichiers lui-même (voir README, section "Partage de
fichiers entre pairs" : décision produit délibérée, pas un oubli) — ce module se
contente d'économiser le clic manuel "\\\\<ip>" dans l'explorateur.

Utilise toujours l'IP virtuelle plutôt que le nom DNS interne (`*.meshamoto`) : marche
identiquement que le DNS interne soit activé ou non (même raisonnement que le bouton
"Copier adresse" du service hébergé).
"""

from __future__ import annotations

import logging
import shutil
import subprocess
import sys

logger = logging.getLogger("meshamoto-client.file_browser")


def open_peer_files(virtual_ip: str) -> None:
    """
    Ouvre l'explorateur de fichiers sur le partage réseau du pair. Ne vérifie pas que
    le partage existe réellement côté pair (ça reste son choix d'avoir activé ou non
    le partage Windows/Samba) — ouvre juste la fenêtre, comme un utilisateur le
    ferait manuellement. Ne bloque jamais (subprocess.Popen, pas .run) : explorer.exe
    en particulier renvoie parfois un code de sortie non nul même en cas de succès,
    attendre/vérifier ce code produirait de faux échecs.
    """
    if sys.platform == "win32":
        subprocess.Popen(["explorer.exe", f"\\\\{virtual_ip}"])
        return

    if sys.platform.startswith("linux"):
        xdg_open = shutil.which("xdg-open")
        if xdg_open is None:
            raise FileNotFoundError(
                "xdg-open introuvable — installez xdg-utils pour ouvrir automatiquement "
                f"l'explorateur de fichiers, ou naviguez manuellement vers smb://{virtual_ip}/ "
                "dans votre gestionnaire de fichiers."
            )
        subprocess.Popen([xdg_open, f"smb://{virtual_ip}/"])
        return

    raise RuntimeError(
        f"Plateforme non supportée : {sys.platform}. "
        "Seuls Windows et Linux sont pris en charge par ce client."
    )
