#!/usr/bin/env bash
set -euo pipefail

REAL="/usr/libexec/cpan.real"

# Снимаем наш кастомный флаг, чтобы CPAN не ругался на неизвестную опцию
break=0
args=()
for a in "$@"; do
  if [ "$a" = "--break-system-perl" ]; then
    break=1
    continue
  fi
  args+=("$a")
done

# root?
uid="${EUID:-$(id -u)}"
is_root=0
if [ "$uid" -eq 0 ]; then
  is_root=1
fi

# Язык по локали
lang="${LC_ALL:-${LC_MESSAGES:-${LANG:-}}}"

# "Безопасно", если админ явно указал альтернативную базу установки через env:
#   PERL_MM_OPT="INSTALL_BASE=...|PREFIX=..."
#   PERL_MB_OPT="--install_base ...|--prefix ..."
mm="${PERL_MM_OPT:-}"
mb="${PERL_MB_OPT:-}"

has_alt_prefix=0
if echo " $mm " | grep -Eq ' (INSTALL_BASE|PREFIX)='; then
  has_alt_prefix=1
elif echo " $mb " | grep -Eq ' --(install_base|prefix)(=| )'; then
  has_alt_prefix=1
fi

# Блокируем root-запуск, если нет явного обхода и нет явного альтернативного префикса
if [ "$is_root" -eq 1 ] && [ "$break" -eq 0 ] && [ -z "${NICEOS_BREAK_SYSTEM_PERL:-}" ] && [ "$has_alt_prefix" -eq 0 ]; then
  if [[ "$lang" == ru* ]]; then
    cat >&2 <<'MSG'
Этот Perl/CPAN в NiceOS управляется пакетным менеджером (dnf/rpm).
Не устанавливайте CPAN-модули в системные пути — это может сломать зависимости ОС.

Правильно:
  1) Пакет из репозитория (если есть):
     dnf install 'perl(Some::Module)'
  2) Установка в local::lib (пользовательский префикс):
     # пример для cpan (желательно)
     cpan --local-lib-contained ~/.perl5 Some::Module
     eval "$(perl -I ~/.perl5/lib/perl5 -Mlocal::lib)"

Осознанный обход (опасно):
  cpan --break-system-perl Some::Module
или:
  NICEOS_BREAK_SYSTEM_PERL=1 cpan Some::Module

Подсказка для админа (безопасно в другой префикс):
  PERL_MM_OPT='INSTALL_BASE=/opt/perl5' cpan Some::Module
MSG
  else
    cat >&2 <<'MSG'
This Perl/CPAN on NiceOS is managed by the system package manager (dnf/rpm).
Do not install CPAN modules into system paths; it can break OS-managed dependencies.

Recommended:
  1) Install a packaged module (if available):
     dnf install 'perl(Some::Module)'
  2) Use local::lib (user prefix):
     # example with cpan (preferred)
     cpan --local-lib-contained ~/.perl5 Some::Module
     eval "$(perl -I ~/.perl5/lib/perl5 -Mlocal::lib)"

Explicit override (dangerous):
  cpan --break-system-perl Some::Module
or:
  NICEOS_BREAK_SYSTEM_PERL=1 cpan Some::Module

Admin hint (safe into a separate prefix):
  PERL_MM_OPT='INSTALL_BASE=/opt/perl5' cpan Some::Module
MSG
  fi
  exit 1
fi

# На случай если кто-то сломал упаковку
if [ ! -e "$REAL" ]; then
  echo "NiceOS cpan wrapper error: missing $REAL" >&2
  exit 2
fi

exec "$REAL" "${args[@]}"
