#!/bin/bash
# ==========================================
# CodiMD 一鍵完整還原腳本 (DB + Uploads)
# ==========================================

# 1. 自動偵測最新的備份檔案
LATEST_DB=$(ls -t ./backup/codimd-db-*.sql.gz 2>/dev/null | head -1)
LATEST_IMG=$(ls -t ./backup/codimd-uploads-*.tar.gz 2>/dev/null | head -1)

if [ -z "$LATEST_DB" ] || [ -z "$LATEST_IMG" ]; then
    echo "❌ 錯誤: 在 ./backup 找不到完整的備份檔 (需要 .sql.gz 和 .tar.gz)"
    exit 1
fi

echo "--- 📋 準備還原以下備份 ---"
echo "📅 資料庫: $LATEST_DB"
echo "🖼️  圖片檔: $LATEST_IMG"
echo "------------------------------------------"
read -p "⚠️  警告：這將會覆蓋目前容器內的所有資料！確定要執行嗎？(y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "操作已取消。"
    exit 1
fi

# 2. 取得 Pod 名稱
DB_POD=$(kubectl get pod -l app=codimd-db -o jsonpath="{.items[0].metadata.name}" 2>/dev/null)
APP_POD=$(kubectl get pod -l app=codimd -o jsonpath="{.items[0].metadata.name}" 2>/dev/null)

if [ -z "$DB_POD" ] || [ -z "$APP_POD" ]; then
    echo "❌ 錯誤: 找不到運作中的 CodiMD Pod，請確認 K8s 資源狀態。"
    exit 1
fi

# --- A. 還原資料庫 (含清空邏輯) ---
echo "--- 🗄️  正在還原資料庫結構與內容... ---"
# 先清空 Schema 以避免重複匯入導致的鍵值衝突
kubectl exec -i $DB_POD -- psql -U codimd -d codimd -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;" > /dev/null

zcat "$LATEST_DB" | kubectl exec -i $DB_POD -- psql -U codimd -d codimd > /dev/null
if [ $? -eq 0 ]; then
    echo "✅ 資料庫還原成功。"
else
    echo "❌ 資料庫還原發生錯誤。"
    exit 1
fi

# --- B. 還原圖片檔案 ---
echo "--- 🖼️  正在同步圖片檔案 (Uploads)... ---"
# 清空目前目錄避免新舊檔案混雜
kubectl exec $APP_POD -- sh -c "rm -rf /home/hackmd/app/public/uploads/*"

# 解壓縮並傳入 Pod
cat "$LATEST_IMG" | kubectl exec -i $APP_POD -- tar zxf - -C /home/hackmd/app/public/

# 修正權限確保 CodiMD 服務 (UID 1500) 擁有存取權
kubectl exec $APP_POD -- chown -R 1500:1500 /home/hackmd/app/public/uploads
echo "✅ 圖片還原與權限修正完成。"

# 3. 重啟服務以套用變更
echo "--- 🔄 正在重啟應用程式容器... ---"
kubectl rollout restart deployment codimd-app
kubectl rollout status deployment codimd-app

echo "------------------------------------------"
echo "✨ 還原程序已執行完畢。"
echo "目前資料已同步至備份檔日期：$(echo $LATEST_DB | grep -oE '[0-9]{8}-[0-9]{4}')"
