#!/usr/bin/env bash

set -Eeuo pipefail

TARGET_HOST='sqjcnginx02'
TARGET_IP='10.2.203.103'
TARGET_NODE='nginx02'
BEGIN_MARKER='NGINX02_HA_READONLY_PREFLIGHT_BEGIN'
PASS_MARKER='NGINX02_HA_PREFLIGHT_PASS'

finish() {
    rc=$?
    echo "${BEGIN_MARKER%_BEGIN}_END RC=$rc"
    exit "$rc"
}
trap finish EXIT

echo "$BEGIN_MARKER"
echo "TARGET_HOST=$TARGET_HOST"
echo "TARGET_IP=$TARGET_IP"
echo "TARGET_NODE=$TARGET_NODE"
echo "START_TIME=$(date '+%Y-%m-%dT%H:%M:%S%z')"

test "$(id -u)" -eq 0
test "$(hostname -s)" = "$TARGET_HOST"
ip -o -4 addr show scope global | awk '{print $4}' | cut -d/ -f1 | grep -Fxq "$TARGET_IP"
echo NGINX_HA_IDENTITY_GATE=PASS

grep -Fxq 'ROLE=nginx' /etc/zhct/node.env
grep -Fxq "NODE_KEY=$TARGET_NODE" /etc/zhct/node.env
grep -Fxq "NODE_IP=$TARGET_IP" /etc/zhct/node.env
test "$(sysctl -n net.ipv4.ip_nonlocal_bind)" = 1
test "$(systemctl is-active nginx)" = active
test "$(systemctl is-active haproxy)" = active
test "$(systemctl is-active keepalived 2>/dev/null || true)" = inactive
echo NGINX_HA_RUNTIME_QUIET_GATE=PASS

/usr/local/nginx/sbin/nginx -t
/usr/local/haproxy/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg
/usr/local/sbin/keepalived --config-test --use-file=/etc/keepalived/keepalived.conf
if grep -Eq '__[A-Z0-9_]+__|@@[A-Z0-9_]+@@' /etc/haproxy/haproxy.cfg /etc/keepalived/keepalived.conf; then
    echo NGINX_HA_PLACEHOLDER_GATE=FAIL
    exit 1
fi
grep -Eq '^[[:space:]]*router_id[[:space:]]+SANQUAN_EDGE_02([[:space:]]|$)' /etc/keepalived/keepalived.conf
grep -Eq '^[[:space:]]*priority[[:space:]]+100([[:space:]]|$)' /etc/keepalived/keepalived.conf
grep -Eq '^[[:space:]]*unicast_src_ip[[:space:]]+10\.2\.203\.103([[:space:]]|$)' /etc/keepalived/keepalived.conf
grep -E '^[[:space:]]*(router_id|virtual_router_id|priority|unicast_src_ip|unicast_peer)' /etc/keepalived/keepalived.conf
echo NGINX_HA_CONFIG_GATE=PASS

sha256sum /usr/local/nginx/conf/nginx.conf /etc/haproxy/haproxy.cfg
for check in check-front-vip.sh check-mqtt-vip.sh check-db-proxy-vip.sh; do
    test -x "/usr/local/sbin/$check"
    "/usr/local/sbin/$check"
    echo "HEALTH_CHECK=$check STATUS=PASS"
done

if ip -o -4 addr show | grep -Eq '10\.2\.203\.(115|116|117)/'; then
    echo NGINX_HA_VIP_ABSENT=FAIL
    exit 1
fi
echo NGINX_HA_VIP_ABSENT=PASS
echo "$PASS_MARKER"
