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

########################################
# Usage 檢查
########################################
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <WORLD_ID1> <WORLD_ID2> [WORLD_ID3 ...]" >&2
    exit 1
fi

########################################
# 取得第一個 WORLD_ID 並計算 SET_ID
########################################
FIRST_WORLD_ID="$1"

# 檢查是否為純數字
if ! [[ "$FIRST_WORLD_ID" =~ ^[0-9]+$ ]]; then
    echo "Error: FIRST_WORLD_ID '$FIRST_WORLD_ID' is not numeric." >&2
    exit 1
fi

# SET_ID = first element / 100
SET_ID=$(( FIRST_WORLD_ID / 100 ))

########################################
# 判斷 AREA
# SET_ID >=10 & <20 => AREA="asia"
# SET_ID >=20 & <30 => AREA="us"
# SET_ID >=30 & <40 => AREA="eu"
########################################
if (( SET_ID >= 10 && SET_ID < 20 )); then
    AREA="asia"
    MACHINE="MERGE_ASIA"
elif (( SET_ID >= 20 && SET_ID < 30 )); then
    AREA="us"
    MACHINE="MERGE_US"
elif (( SET_ID >= 30 && SET_ID < 40 )); then
    AREA="eu"
    MACHINE="MERGE_EU"
else
    echo "Error: Unsupported SET_ID '${SET_ID}'. (Only 10~39 supported)" >&2
    exit 1
fi

########################################
# For loop arguments
# - 確認所有 world 的 SET_ID 都一致
# - 組出 WORLD_ID_LISTS_STR (e.g. 1101_1107_1108)
########################################
WORLD_ID_LISTS_STR=""

for WORLD_ID in "$@"; do
    # 確認都是數字
    if ! [[ "$WORLD_ID" =~ ^[0-9]+$ ]]; then
        echo "Error: WORLD_ID '$WORLD_ID' is not numeric." >&2
        exit 1
    fi

    CURRENT_SET_ID=$(( WORLD_ID / 100 ))
    if (( CURRENT_SET_ID != SET_ID )); then
        echo "Error: WORLD_ID '$WORLD_ID' has SET_ID ${CURRENT_SET_ID}, but expected ${SET_ID}." >&2
        echo "All WORLD_IDs must belong to the same SET_ID." >&2
        exit 1
    fi

    # WORLD_ID_LISTS_STR: 用 _ 串起來 (例如 1101_1107_1108)
    if [ -z "$WORLD_ID_LISTS_STR" ]; then
        WORLD_ID_LISTS_STR="${WORLD_ID}"
    else
        WORLD_ID_LISTS_STR+="_${WORLD_ID}"
    fi
done

# 做一個 space 版的 world list，給 generate_merge_preparation 用
WORLD_ID_LISTS_SPACE=${WORLD_ID_LISTS_STR//_/ }

########################################
# Assign variables
########################################
TODAY=$(date +"%Y%m%d")
DIRECTORY_NAME="merge_${AREA}_${TODAY}"

# Remote 路徑變數（保留 remote 端的 $HOME）
REMOTE_BASE_DIR="\$HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}"
REMOTE_MERGE_INI="${REMOTE_BASE_DIR}/merge_setup.ini"

########################################
# 簡單輸出確認資訊
########################################
echo "SET_ID        : ${SET_ID}"
echo "AREA          : ${AREA}"
echo "WORLD_ID_LISTS: ${WORLD_ID_LISTS_SPACE}"
echo "WORLD_ID_STR  : ${WORLD_ID_LISTS_STR}"
echo "MACHINE       : ${MACHINE}"
echo "DIRECTORY     : ${DIRECTORY_NAME}"
echo

########################################
# Generate merge related directory & files
# ssh ${MACHINE} "$HOME/bin/generate_merge_preparation ${DIRECTORY_NAME} 1101 1107 1108"
########################################
ssh "${MACHINE}" "\$HOME/bin/generate_merge_preparation_test ${DIRECTORY_NAME} ${WORLD_ID_LISTS_SPACE}"

########################################
# Verify DB connections
# ssh ${MACHINE} "$HOME/bin/merge_db_connect_verify \"$HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/merge_setup.ini\""
########################################
ssh "${MACHINE}" "\$HOME/bin/merge_db_connect_verify \"${REMOTE_MERGE_INI}\""

########################################
# DBbackup Pre
# ssh ${MACHINE} "$HOME/bin/merge_db_backup \"$HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/merge_setup.ini\" _${TODAY}_Pre"
########################################
ssh "${MACHINE}" "\$HOME/bin/merge_db_backup \"${REMOTE_MERGE_INI}\" _${TODAY}_Pre"

########################################
# Execute merge process
# ssh ${MACHINE} "cd $HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/; nohup ./merge_exec &"
########################################
ssh "${MACHINE}" "cd ${REMOTE_BASE_DIR}; nohup ./merge_exec &"

########################################
# Checks Server log
# ssh ${MACHINE} "cd $HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/; grep -E ',WolrdDB|,WorldDB|,GameDB|,AccountDB|,Done| autosend_info| redenvelope_info' Test.log*"
########################################
ssh "${MACHINE}" "cd ${REMOTE_BASE_DIR}; grep -E ',WolrdDB|,WorldDB|,GameDB|,AccountDB|,Done| autosend_info| redenvelope_info' Test.log*"

########################################
# DBbackup Post
# ssh ${MACHINE} "$HOME/bin/merge_db_backup \"$HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/merge_setup.ini\" _${TODAY}_Post"
########################################
ssh "${MACHINE}" "\$HOME/bin/merge_db_backup \"${REMOTE_MERGE_INI}\" _${TODAY}_Post"

########################################
# Compare DB Between Pre and Post
# ssh ${MACHINE} "$HOME/bin/merge_check_v3 \"$HOME/servers${SET_ID}/${DIRECTORY_NAME}/${WORLD_ID_LISTS_STR}/merge_setup.ini\" _${TODAY}_Pre _${TODAY}_Post"
########################################
ssh "${MACHINE}" "\$HOME/bin/merge_check_v3 \"${REMOTE_MERGE_INI}\" _${TODAY}_Pre _${TODAY}_Post"

echo "合併流程完成。"

