"""Detecção de plataforma e arquitetura para baixar os binários corretos."""

import platform
import sys


def get_os() -> str:
    """Retorna 'windows', 'darwin' ou 'linux'."""
    system = platform.system().lower()
    if system == "darwin":
        return "darwin"
    if system == "windows":
        return "windows"
    return "linux"


def get_arch() -> str:
    """Normaliza a arquitetura pro formato usado nos releases do gitleaks."""
    machine = platform.machine().lower()
    if machine in ("x86_64", "amd64"):
        return "x64"
    if machine in ("arm64", "aarch64"):
        return "arm64"
    if machine in ("i386", "i686", "x86"):
        return "x32"
    return machine


def binary_name(base_name: str) -> str:
    """Adiciona .exe no Windows quando necessário."""
    if get_os() == "windows":
        return f"{base_name}.exe"
    return base_name


def abyss_home() -> "Path":
    """Diretório onde guardamos binários auxiliares baixados (gitleaks etc)."""
    from pathlib import Path

    if get_os() == "windows":
        base = Path.home() / "AppData" / "Local" / "abyss-cli"
    elif get_os() == "darwin":
        base = Path.home() / "Library" / "Application Support" / "abyss-cli"
    else:
        base = Path.home() / ".local" / "share" / "abyss-cli"

    base.mkdir(parents=True, exist_ok=True)
    return base


def is_supported() -> bool:
    return sys.version_info >= (3, 9)