#!/usr/bin/env bash
# 用法：
#   ./remove_source_wids_on_hosts_after_merge <target_world_id> <source_world_id1> [source_world_id2 ...]...
#
# 規則：
#   - 參數數量必須 >= 2（第一個參數為 target world id，不參與過濾）
#   - 從第二個參數開始為數字 pattern (source world ids)
#   - 每個欄位以空白分隔
#   - 移除所有「數字結尾部分以 pattern 開頭」的欄位
#     例：pattern=1101 時，會刪掉：
#         WS1101、WHS11011、WHS11012、WORLDDB1101、WWEBSPS11011 等
#   - 讀取目前目錄下的 test 檔，不修改原檔
#   - 將結果輸出到：test.new.$YYYYmmdd

input_file="$HOME/bin/hosts.test"

# 參數檢查：至少要有 2 個參數
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <target_world_id> <source_world_id1> [source_world_id2 ...]" >&2
    exit 1
fi

# 丟掉第一個參數（target world id）
shift 1
patterns=("$@")

# 產生輸出檔名：原檔名 + .new.$YYYYmmdd
date_str=$(date +%Y%m%d)
output_file="${input_file}.new.${date_str}"

# 使用群組命令搭配 tee：
#   先把處理結果輸出到 stdout，再由 tee 同時寫入檔案與印到畫面
{
    while IFS= read -r line; do
        # 用來存放要保留的欄位
        out=()

        # 以空白拆成欄位
        for word in $line; do
            remove=0

            # 針對每一個 pattern 檢查
            for p in "${patterns[@]}"; do
                # 條件：
                #   開頭是 0 個以上非數字，接著是 pattern，最後是 0 個以上數字
                #   等效為「token 的數字結尾部分，以 pattern 開頭」
                if [[ "$word" =~ ^[^0-9]*${p}[0-9]*$ ]]; then
                    remove=1
                    break
                fi
            done

            # 被標記為要刪除的欄位就略過
            [ "$remove" -eq 1 ] && continue

            # 其餘欄位保留
            out+=("$word")
        done

        # 輸出處理後的一行（欄位以單一空白連接）
        printf '%s\n' "${out[*]}"
    done < "$input_file"
} | tee "$output_file"

echo "Output written to: $output_file" >&2
