#!/bin/bash
# install-ish.sh — установка ПО «Интеграционный шлюз НРД» (ИШ) на Astra Linux.
#
# Документ-источник: DOC/ruk_install_ish_2025_11_10.pdf (раздел 7.3.2).
#
# Пред-требования:
#   1. ОС: Astra Linux SE 1.6 или 1.7
#   2. УСТАНОВЛЕНА Валидата CSP + АПК Валидата Клиент L (см. install-validata.sh)
#   3. Корневой сертификат УЦ МБ загружен в Справочник сертификатов
#   4. Пользовательский сертификат экспортирован в системное хранилище
#
# Что делает скрипт:
#   1. Проверяет наличие Валидаты
#   2. Устанавливает igate_*.deb через dpkg
#   3. Создаёт каталог настроек ~/igate
#   4. Подсказывает следующие шаги (запуск настройщика каналов)

set -euo pipefail

DEB_PATH="${1:-}"

log()   { echo -e "\033[1;34m[ish-install]\033[0m $*"; }
warn()  { echo -e "\033[1;33m[ish-install WARN]\033[0m $*" >&2; }
fail()  { echo -e "\033[1;31m[ish-install FAIL]\033[0m $*" >&2; exit 1; }

# ---- 1. Поиск .deb ----
if [ -z "$DEB_PATH" ]; then
    # Поиск в стандартных местах
    for candidate in \
        ./dist/ish/igate_*_amd64.deb \
        /opt/bj/src/dist/ish/igate_*_amd64.deb \
        ~/Downloads/igate_*_amd64.deb \
        /tmp/igate_*_amd64.deb; do
        if [ -f "$candidate" ]; then
            DEB_PATH="$candidate"
            break
        fi
    done
fi
if [ -z "$DEB_PATH" ] || [ ! -f "$DEB_PATH" ]; then
    fail "Не найден .deb пакет ИШ. Скачайте с https://www.nsd.ru/workflow/system/programs/web-service/ и передайте путь:
        sudo bash $0 /path/to/igate_100.0-765_amd64.deb"
fi
log "Дистрибутив ИШ: $DEB_PATH"

# ---- 2. Проверка ОС ----
if [ -r /etc/astra_version ]; then
    log "Astra Linux: $(cat /etc/astra_version)"
else
    warn "Это не Astra Linux. ИШ под Astra Linux может не запуститься на других ОС."
    warn "Продолжить? (y/N)"
    read -r REPLY < /dev/tty
    [ "$REPLY" = "y" ] || exit 1
fi

# ---- 3. Проверка Валидаты ----
log "Проверка СКЗИ Валидата CSP..."
VAL_FOUND=0
for path in /opt/Validata /opt/validata-csp /opt/Validata-CSP /usr/local/Validata; do
    [ -d "$path" ] && { log "  ✓ Валидата найдена в $path"; VAL_FOUND=1; break; }
done
if [ "$VAL_FOUND" = 0 ]; then
    warn "Валидата CSP не найдена. ИШ всё равно поставится, но не запустится без СКЗИ."
    warn "Получите дистрибутив Валидаты у НРД (soed@nsd.ru) и поставьте через install-validata.sh."
    warn "Продолжить установку ИШ? (y/N)"
    read -r REPLY < /dev/tty
    [ "$REPLY" = "y" ] || exit 1
fi

# ---- 4. dpkg -i ----
log "Установка ИШ через dpkg..."
[ "$EUID" -eq 0 ] || fail "Запускать от root (sudo bash $0)"
dpkg -i "$DEB_PATH" 2>&1 | tee /tmp/igate-install.log || {
    warn "dpkg -i вернул ошибку, пытаюсь починить зависимости через apt-get install -f"
    apt-get install -f -y
    dpkg -i "$DEB_PATH"
}

# ---- 5. Проверка ----
if command -v igate >/dev/null 2>&1; then
    log "✓ ИШ установлен: $(which igate)"
elif [ -x /opt/igate/igate ]; then
    log "✓ ИШ установлен в /opt/igate/"
else
    warn "Бинарник igate не нашёл в PATH. Возможно установлен в /opt/igate или ~/igate."
    warn "Проверьте: dpkg -L igate | grep -E 'bin|igate$'"
fi

# ---- 6. Финал ----
echo
echo "================================================================"
echo "  ИШ установлен"
echo "================================================================"
echo
echo "  Следующие шаги (по DOC/ruk_install_ish_2025_11_10.pdf раздел 10):"
echo "  1. Запустить ИШ в GUI:  igate &  (или через меню Пуск/Astra)"
echo "  2. Настройки БД          → PostgreSQL (URL/логин/пароль из bj-server)"
echo "  3. Создать канал WSL     → URL https://gost.nsd.ru/onyxt3/WslService (TEST3)"
echo "  4. Указать сертификат УЦ МБ из системного хранилища"
echo "  5. Активировать ИШ как сервис:"
echo "     sudo systemctl enable --now igate"
echo
echo "  REST API ИШ (для bj-server):"
echo "     http://localhost:8090  (порт по умолчанию — см. настройки ИШ)"
echo
echo "  После настройки канала в ИШ: открыть"
echo "     http://<этот-сервер>:8080/admin/setup → раздел «Интеграционный шлюз НРД»"
echo "  и указать URL ИШ + имя канала."
echo "================================================================"
