#!/usr/bin/env bash

# 使用方式：
#   ./merge_db_connect_verify /absolute/path/to/merge_setup.ini
#
# 流程：
#   1. merge_db_connect_verify
#   2. load_merge_db_setup <setup.conf>
#   3. 檢查 AccountDB / GameDB / 所有 WorldDB（PostgreSQL）連線
#   4. 若任何一個失敗，整體 exit code = 1

set -u

if [[ $# -lt 1 ]]; then
    echo "Usage: $0 /absolute/path/to/setup.conf" >&2
    exit 1
fi

SETUP_FILE="$1"

if [[ "${SETUP_FILE:0:1}" != "/" ]]; then
    echo "請使用 setup 檔案的絕對路徑（目前：$SETUP_FILE）" >&2
    exit 1
fi

if [[ ! -f "$SETUP_FILE" ]]; then
    echo "找不到 setup 檔案：$SETUP_FILE" >&2
    exit 1
fi

# 取得目前腳本所在目錄，假設 load_merge_db_setup 跟這支在同一個目錄
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 引入 load_merge_db_setup
source "$SCRIPT_DIR/load_merge_db_setup"

# 載入設定
if ! load_merge_db_setup "$SETUP_FILE"; then
    echo "載入設定檔失敗：$SETUP_FILE" >&2
    exit 1
fi

echo "=== 檢查 PostgreSQL DB 連線：$SETUP_FILE ==="

overall_status=0

########################################
# 檢查 Account DB
########################################
if check_accountdb_connection; then
    echo "[OK]  AccountDB 連線正常"
else
    echo "[NG]  AccountDB 連線失敗"
    overall_status=1
fi

########################################
# 檢查 Game DB
########################################
if check_gamedb_connection; then
    echo "[OK]  GameDB 連線正常"
else
    echo "[NG]  GameDB 連線失敗"
    overall_status=1
fi

########################################
# 檢查所有 World DB
########################################
if [[ "${#world_ids[@]}" -gt 0 ]]; then
    mapfile -t sorted_world_ids < <(printf "%s\n" "${!world_ids[@]}" | sort -n)

    for wid in "${sorted_world_ids[@]}"; do
        if check_worlddb_connection "$wid"; then
            echo "[OK]  WorldDB($wid) 連線正常"
        else
            echo "[NG]  WorldDB($wid) 連線失敗"
            overall_status=1
        fi
    done
else
    echo "[INFO] 沒有任何 WorldDB 設定"
fi

echo "=== 檢查結束（PostgreSQL） ==="

exit "$overall_status"

