#!/bin/bash
# 刪除 PostgreSQL 資料庫，依指令列參數提供的 DB 名稱列表
# Usage: ./drop_db_list.sh db1 [db2 db3 ...]

# 至少要有一個參數
if [ "$#" -lt 1 ]; then
    echo "Usage: $0 <db1> [db2 db3 ...]"
    exit 1
fi

# PostgreSQL 連線參數，可用環境變數覆寫
PGUSER="postgres"
PGHOST="127.0.0.1"
PGPORT="5432"
PGDATABASE="${PGDATABASE:-postgres}"  # 用來執行 DROP 的控制 DB

# 檢查 psql 是否存在
if ! command -v psql >/dev/null 2>&1; then
    echo "錯誤：找不到 psql 指令，請確認 PostgreSQL client 已安裝並在 PATH 中。"
    exit 1
fi

echo "即將刪除以下資料庫："
for db in "$@"; do
    echo "  - ${db}"
done
echo

# 簡單的防呆確認
read -r -p "請輸入 'yes' 確認刪除上述資料庫 (預設取消)： " ans
if [ "$ans" != "yes" ]; then
    echo "已取消操作。"
    exit 0
fi

echo

for db in "$@"; do
    # 保護系統內建 DB（依需求可再加）
    case "$db" in
        template0|template1|postgres)
            echo "略過系統資料庫：${db}"
            continue
            ;;
    esac

    echo "處理資料庫：${db}"

    # 檢查 DB 是否存在
    exists=$(psql -U "$PGUSER" -h "$PGHOST" -p "$PGPORT" -d "$PGDATABASE" -tAc \
        "SELECT 1 FROM pg_database WHERE datname = '$db';" 2>/dev/null)

    if [ "$exists" != "1" ]; then
        echo "  - 資料庫不存在，略過。"
        echo
        continue
    fi

    # 執行 DROP DATABASE
    if psql -U "$PGUSER" -h "$PGHOST" -p "$PGPORT" -d "$PGDATABASE" -v ON_ERROR_STOP=1 \
        -c "DROP DATABASE \"${db}\";"; then
        echo "  - 已刪除。"
    else
        echo "  - 刪除失敗，請手動檢查。"
    fi
    echo
done

echo "全部處理完成。"

