"""Funcoes pequenas usadas pelo instalador E pelo servidor.

So biblioteca padrao aqui: o `instalar.py` roda com o Python do sistema, antes
do .venv existir, entao este arquivo nao pode importar nada de fora.
"""
import os
import shutil
from pathlib import Path

# Onde o ffmpeg costuma cair no Windows. Serve para o caso mais chato de todos:
# a pessoa acabou de instalar pelo winget, mas o terminal aberto ainda tem o PATH
# velho e nao enxerga o programa. O arquivo esta la; e so procurar.
PISTAS_WINDOWS = [
    r"%LOCALAPPDATA%\Microsoft\WinGet\Links\ffmpeg.exe",
    r"%LOCALAPPDATA%\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg*\bin\ffmpeg.exe",
    r"%ProgramFiles%\ffmpeg\bin\ffmpeg.exe",
    r"%ProgramData%\chocolatey\bin\ffmpeg.exe",
    r"C:\ffmpeg\bin\ffmpeg.exe",
]


def achar_ffmpeg(nome: str = "ffmpeg") -> str | None:
    """Caminho do ffmpeg (ou ffprobe), ou None se nao existir na maquina."""
    achado = shutil.which(nome)
    if achado:
        return achado
    if os.name != "nt":
        return None
    for pista in PISTAS_WINDOWS:
        padrao = os.path.expandvars(pista).replace("ffmpeg.exe", f"{nome}.exe")
        if "*" in padrao:
            p = Path(padrao)
            # a parte com * vira busca; o resto e caminho fixo
            raiz = Path(padrao.split("*")[0]).parent
            if raiz.exists():
                for achado in sorted(raiz.glob(p.name if raiz == p.parent else "**/" + p.name), reverse=True):
                    return str(achado)
        elif Path(padrao).exists():
            return padrao
    return None
