#!/bin/bash
# healthcheck.sh — проверка готовности bj-server после установки на Astra Linux.
# Запускается на самой Astra Linux ВМ, печатает зелёные/жёлтые/красные галочки.

set -uo pipefail

ok()    { echo -e " \033[1;32m✓\033[0m $*"; }
warn()  { echo -e " \033[1;33m⚠\033[0m $*"; }
fail()  { echo -e " \033[1;31m✗\033[0m $*"; }

echo "================================================================"
echo "  Bridge-and-Join-s — проверка состояния"
echo "================================================================"

# 1. ОС
echo
echo "[1] Операционная система"
if [ -r /etc/astra_version ]; then
    ok "Astra Linux: $(cat /etc/astra_version)"
else
    warn "Не Astra Linux — ИШ может не запуститься"
fi

# 2. Пользователь bj
echo
echo "[2] Пользователь и каталоги"
id bj >/dev/null 2>&1 && ok "пользователь bj существует" || fail "пользователь bj не создан"
[ -d /opt/bj ] && ok "/opt/bj существует" || fail "/opt/bj не найден"
[ -x /opt/bj/bj-server ] && ok "/opt/bj/bj-server исполняемый" || fail "/opt/bj/bj-server отсутствует"
[ -d /var/lib/bj/.bj ] && ok "/var/lib/bj/.bj существует" || warn "/var/lib/bj/.bj не создан"

# 3. systemd
echo
echo "[3] systemd сервис"
if systemctl is-enabled --quiet bj-server 2>/dev/null; then
    ok "bj-server.service enabled"
else
    warn "bj-server.service не enabled"
fi
if systemctl is-active --quiet bj-server 2>/dev/null; then
    ok "bj-server.service active"
else
    fail "bj-server.service не active — systemctl status bj-server"
fi

# 4. HTTP
echo
echo "[4] HTTP-эндпоинты"
HTTP_OK=0
for path in / /admin/ /admin/wizard /admin/help/architecture; do
    code=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:8080$path" 2>/dev/null || echo "—")
    if [ "$code" = "200" ] || [ "$code" = "303" ]; then
        ok "GET $path → $code"
        HTTP_OK=$((HTTP_OK+1))
    else
        fail "GET $path → $code"
    fi
done

# 5. PostgreSQL
echo
echo "[5] PostgreSQL"
if command -v podman >/dev/null 2>&1; then
    if podman ps --format '{{.Names}}' 2>/dev/null | grep -qx bj-postgres; then
        ok "контейнер bj-postgres работает"
    else
        warn "контейнер bj-postgres не запущен"
    fi
else
    warn "podman не установлен"
fi
if pg_isready -h 127.0.0.1 -p 5432 -U bj >/dev/null 2>&1; then
    ok "PostgreSQL отвечает на :5432"
else
    warn "PostgreSQL :5432 недоступен"
fi

# 6. Валидата
echo
echo "[6] СКЗИ Валидата (для ИШ)"
VAL_FOUND=0
for path in /opt/Validata /opt/validata-csp /opt/Validata-CSP; do
    [ -d "$path" ] && { ok "найдена в $path"; VAL_FOUND=1; break; }
done
[ "$VAL_FOUND" = 0 ] && warn "не установлена (запроси у НРД soed@nsd.ru, потом sudo bash deploy/astra/install-validata.sh)"

# 7. ИШ
echo
echo "[7] Интеграционный шлюз (ИШ)"
if command -v igate >/dev/null 2>&1; then
    ok "igate в PATH: $(which igate)"
elif [ -x /opt/igate/igate ]; then
    ok "igate в /opt/igate/"
else
    warn "ИШ не установлен (sudo bash deploy/astra/install-ish.sh)"
fi

# 8. Сетевые порты
echo
echo "[8] Сетевые порты"
if command -v ss >/dev/null 2>&1; then
    PORTS=$(ss -tlnp 2>/dev/null | awk 'NR>1{print $4}')
    echo "$PORTS" | grep -q ':8080$' && ok ":8080 (bj-server) слушает" || fail ":8080 не слушает"
    echo "$PORTS" | grep -q ':5432$' && ok ":5432 (postgres) слушает" || warn ":5432 не слушает"
    echo "$PORTS" | grep -q ':8090$' && ok ":8090 (предполагаемый ИШ) слушает" || warn ":8090 (ИШ) не слушает"
fi

# Итог
echo
echo "================================================================"
echo "  Готово. Подробнее:"
echo "    journalctl -u bj-server -f"
echo "    http://$(hostname -I | awk '{print $1}'):8080/admin/"
echo "================================================================"
