# --- Proxy Settings ---
# Переменные для прокси по умолчанию (если нужно, чтобы он был включен всегда)
# export HTTP_PROXY="http://127.0.0.1:10809"
# export HTTPS_PROXY="http://127.0.0.1:10809"

# --- WSL Host Update (только WSL NAT) ---
update_hproxy() {
    local script
    script="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/../scripts/setup-hproxy.sh"
    if [ ! -f "$script" ]; then
        echo "❌ Скрипт не найден: $script"
        return 1
    fi
    if ! awk '/^\[boot\]$/{b=1;next} /^\[/{b=0} b && /^[[:space:]]*command[[:space:]]*=/ && /setup-hproxy\.sh/' \
            "${WSL_CONF_PATH:-/etc/wsl.conf}" 2>/dev/null | grep -q .; then
        echo "⚠️ Boot command не настроен — update_hproxy работает только для WSL NAT"
        return 1
    fi
    if ! sudo "$script"; then
        echo "❌ Ошибка обновления hproxy.local"
        return 1
    fi
    echo "✅ hproxy.local -> $(getent hosts hproxy.local 2>/dev/null | awk '{print $1}')"
}

# Единый источник правды для прокси-эндпоинта (не экспортируется; идемпотентно
# при повторном source). NO_PROXY: ::1 и [::1] нужны, т.к. localhost в dual-stack
# Linux резолвится в IPv6, и без них локальные MCP/loopback-соединения
# (chroma-mcp, claude-mem worker и т.п.) уходят в SOCKS5 через hproxy.local.
: "${_PROXY_HOST:=hproxy.local}"
: "${_PROXY_PORT:=12334}"
: "${_PROXY_NO_PROXY:=hproxy.local,localhost,127.0.0.1,::1,[::1],.concept-software.ru}"

# Внутренний: экспортирует proxy-env (+ lower-case дубли для Python-стека).
# Единственное место, где формируются значения переменных.
_proxy_export() {
    export HTTP_PROXY="http://${_PROXY_HOST}:${_PROXY_PORT}"
    export HTTPS_PROXY="http://${_PROXY_HOST}:${_PROXY_PORT}"
    export ALL_PROXY="socks5://${_PROXY_HOST}:${_PROXY_PORT}"
    export NO_PROXY="$_PROXY_NO_PROXY"
    export http_proxy="$HTTP_PROXY"
    export https_proxy="$HTTPS_PROXY"
    export all_proxy="$ALL_PROXY"
    export no_proxy="$_PROXY_NO_PROXY"
}

# Внутренний: fail-fast проверка доступности прокси (только reachability —
# не доказательство, что трафик реально проксируется). Таймаут покрывает и
# медленный DNS-резолв; при зависании — отказ запуска (безопасный отказ).
_proxy_reachable() {
    timeout "${PROXY_PREFLIGHT_TIMEOUT:-2}" \
        bash -c "exec 3<>/dev/tcp/${_PROXY_HOST}/${_PROXY_PORT}" 2>/dev/null
}

# Внутренний: запуск команды с proxy-env. Pre-flight, затем subshell+exec —
# env виден только дочернему процессу, не протекает в родительский shell,
# код возврата пробрасывается.
_proxy_run() {
    local cmd="$1"; shift
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "❌ Команда не найдена в PATH: $cmd" >&2
        return 127
    fi
    if ! _proxy_reachable; then
        echo "❌ Прокси ${_PROXY_HOST}:${_PROXY_PORT} недоступен — запуск '$cmd' отменён." >&2
        return 1
    fi
    # exec и так резолвит через PATH в обход функций/алиасов.
    ( _proxy_export; exec "$cmd" "$@" )
}

pclaude() { _proxy_run claude "$@"; }
pcodex()  { _proxy_run codex  "$@"; }

# Удобные функции-переключатели для терминала.
proxy_on() {
    _proxy_export
    echo "✅ Proxy enabled. Checking route..."
    # Подставляем результат выполнения curl прямо в строку
    echo "🌍 Current IP: $(curl -s --max-time 3 https://ifconfig.me)"
}

proxy_off() {
    unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
    unset http_proxy https_proxy all_proxy no_proxy
    echo "❌ Proxy disabled. Checking route..."
    echo "🏠 Current IP: $(curl -s --max-time 3 https://ifconfig.me)"
}

# Заодно можно добавить алиас, чтобы быстро чекать IP в любой момент без переключения
alias myip='echo "IP: $(curl -s --max-time 3 https://ifconfig.me)"'

