#!/bin/bash
# =============================================================================
# Apache Superset 部署腳本
# MOMO Pro System - UAT 環境
# =============================================================================

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

# 顯示使用方式
usage() {
    echo "使用方式: $0 [命令]"
    echo ""
    echo "命令:"
    echo "  deploy    部署 Superset (預設)"
    echo "  stop      停止 Superset"
    echo "  restart   重啟 Superset"
    echo "  logs      查看日誌"
    echo "  status    查看狀態"
    echo "  clean     已停用：避免誤刪 Superset 資料"
    echo ""
}

# 部署 Superset
deploy() {
    log_info "開始部署 Apache Superset..."

    # 檢查 Docker
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安裝"
        exit 1
    fi

    # 拉取映像
    log_info "拉取 Docker 映像..."
    docker compose pull

    # 啟動服務
    log_info "啟動 Superset 服務..."
    docker compose up -d

    # 等待健康檢查
    log_info "等待服務啟動 (約 2 分鐘)..."
    local max_wait=180
    local waited=0
    local interval=10

    while [ $waited -lt $max_wait ]; do
        if docker compose ps | grep -q "healthy"; then
            log_success "Superset 啟動成功!"
            break
        fi

        # 檢查是否有容器失敗
        if docker compose ps | grep -q "Exit"; then
            log_error "容器啟動失敗"
            docker compose logs --tail=50
            exit 1
        fi

        sleep $interval
        waited=$((waited + interval))
        log_info "等待中... ($waited/$max_wait 秒)"
    done

    if [ $waited -ge $max_wait ]; then
        log_warn "等待超時，請手動檢查服務狀態"
        docker compose ps
    fi

    # 顯示訪問資訊
    echo ""
    log_success "=========================================="
    log_success "Apache Superset 部署完成!"
    log_success "=========================================="
    echo ""
    echo "內部訪問: http://127.0.0.1:8088"
    echo "外部訪問: https://monitor.wooo.work/superset/"
    echo ""
    echo "登入帳號: admin"
    echo "登入密碼: Wooo_Superset_2026"
    echo ""
    echo "下一步："
    echo "  1. 設定 Nginx 反向代理"
    echo "  2. 新增資料庫連線 (UAT/GCP)"
    echo "  3. 建立資料集和儀表板"
    echo ""
}

# 停止服務
stop() {
    log_info "停止 Superset 服務..."
    docker compose stop
    log_success "服務已停止"
}

# 重啟服務
restart() {
    log_info "重啟 Superset 服務..."
    docker compose restart
    log_success "服務已重啟"
}

# 查看日誌
logs() {
    docker compose logs -f --tail=100
}

# 查看狀態
status() {
    echo ""
    log_info "Superset 服務狀態:"
    echo ""
    docker compose ps
    echo ""

    # 檢查健康狀態
    if docker compose ps | grep -q "healthy"; then
        log_success "所有服務運行正常"
    elif docker compose ps | grep -q "unhealthy"; then
        log_warn "有服務不健康"
    fi
}

# 清除所有資料
clean() {
    log_error "clean 已停用：資料清除必須先完成備份與人工審核"
    log_error "如需重建 Superset，請先匯出儀表板、確認 volume 名稱，再由維運人員手動處理"
    exit 1
}

# 主程式
case "${1:-deploy}" in
    deploy)
        deploy
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    logs)
        logs
        ;;
    status)
        status
        ;;
    clean)
        clean
        ;;
    -h|--help)
        usage
        ;;
    *)
        log_error "未知命令: $1"
        usage
        exit 1
        ;;
esac
