#!/bin/bash

#############################################
# AI Dev System - Web Dashboard Launcher
# 啟動 Web 界面 + Ngrok 遠程訪問
#############################################

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

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

echo -e "${BLUE}"
cat << "EOF"
╔═══════════════════════════════════════════════════════╗
║                                                       ║
║        🌐 AI Dev System Web Dashboard                ║
║                                                       ║
╚═══════════════════════════════════════════════════════╝
EOF
echo -e "${NC}"

# 檢查 Python
if ! command -v python3 &> /dev/null; then
    echo -e "${RED}✗ Python 3 未安裝${NC}"
    echo "請安裝 Python 3: sudo apt-get install python3 python3-pip"
    exit 1
fi

# 檢查並安裝依賴
echo -e "${YELLOW}檢查 Python 依賴...${NC}"
if ! python3 -c "import fastapi" 2>/dev/null; then
    echo "安裝依賴套件..."
    pip3 install -r "$SCRIPT_DIR/requirements.txt" --break-system-packages
fi

# 初始化資料庫
echo -e "${YELLOW}初始化資料庫...${NC}"
python3 "$SCRIPT_DIR/db_manager.py" init

# 檢查參數
USE_NGROK=false
PORT=8000
DAEMON_MODE=false

# 解析參數
while [[ $# -gt 0 ]]; do
    case $1 in
        --ngrok|-n)
            USE_NGROK=true
            shift
            ;;
        --port|-p)
            PORT="$2"
            if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
                echo -e "${RED}✗ 無效的端口號: $PORT${NC}"
                echo "端口號必須是 1-65535 之間的數字"
                exit 1
            fi
            shift 2
            ;;
        --daemon|-d)
            DAEMON_MODE=true
            shift
            ;;
        *)
            echo -e "${RED}✗ 未知參數: $1${NC}"
            exit 1
            ;;
    esac
done

# 如果需要使用 ngrok，檢查相關設定
if [ "$USE_NGROK" = true ]; then
    # 檢查 ngrok 是否安裝
    if ! command -v ngrok &> /dev/null; then
        echo -e "${YELLOW}⚠️  Ngrok 未安裝${NC}"
        echo ""
        echo "請訪問 https://ngrok.com/ 下載並安裝 ngrok"
        echo ""
        read -p "是否繼續（僅本地訪問）？(y/n) " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
        USE_NGROK=false
    else
        # 檢查 ngrok 是否已設定 authtoken
        if ! ngrok config check &>/dev/null; then
            echo -e "${YELLOW}請設定 ngrok authtoken${NC}"
            echo "1. 到 https://dashboard.ngrok.com/get-started/your-authtoken 取得 token"
            echo "2. 執行: ngrok config add-authtoken YOUR_TOKEN"
            echo ""
            read -p "已設定 authtoken？按 Enter 繼續..."
        fi
    fi
fi

# 建立日誌目錄
mkdir -p "$HOME/.ai-dev-logs"

# 啟動 Web Server
echo ""
echo -e "${GREEN}🚀 啟動 Web Dashboard...${NC}"
echo ""

# 檢查端口是否被占用
if command -v netstat &> /dev/null; then
    if netstat -tuln | grep -q ":$PORT "; then
        echo -e "${RED}✗ 端口 $PORT 已被占用${NC}"
        echo "請選擇其他端口或停止占用該端口的程序"
        exit 1
    fi
elif command -v ss &> /dev/null; then
    if ss -tuln | grep -q ":$PORT "; then
        echo -e "${RED}✗ 端口 $PORT 已被占用${NC}"
        echo "請選擇其他端口或停止占用該端口的程序"
        exit 1
    fi
else
    echo -e "${YELLOW}⚠️  無法檢查端口占用情況（netstat/ss 未安裝）${NC}"
fi

# 在背景啟動 web server
WEB_SERVER_PORT=$PORT python3 "$SCRIPT_DIR/web_server.py" > "$HOME/.ai-dev-logs/web-server.log" 2>&1 &
WEB_PID=$!

# 儲存當前使用的端口
echo "$PORT" > "$HOME/.ai-dev-logs/web-server-port"

# 等待 server 啟動
sleep 3

# 檢查 server 是否成功啟動
if ! kill -0 $WEB_PID 2>/dev/null; then
    echo -e "${RED}✗ Web Server 啟動失敗${NC}"
    echo "查看日誌: tail -f $HOME/.ai-dev-logs/web-server.log"
    exit 1
fi

echo -e "${GREEN}✓ Web Server 已啟動 (PID: $WEB_PID)${NC}"

# 儲存 PID
echo $WEB_PID > "$HOME/.ai-dev-logs/web-server.pid"

# 本地訪問資訊
echo ""
echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}  本地訪問${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
echo -e "  📊 Dashboard: ${GREEN}http://localhost:$PORT${NC}"
echo -e "  📖 API Docs:  ${GREEN}http://localhost:$PORT/docs${NC}"
echo ""

# 如果使用 ngrok
if [ "$USE_NGROK" = true ]; then
    echo -e "${YELLOW}啟動 ngrok 遠程訪問...${NC}"
    
    # 在背景啟動 ngrok
    ngrok http $PORT --log=stdout > "$HOME/.ai-dev-logs/ngrok.log" 2>&1 &
    NGROK_PID=$!
    
    echo $NGROK_PID > "$HOME/.ai-dev-logs/ngrok.pid"
    
    # 等待 ngrok 啟動
    sleep 3
    
    # 取得 ngrok URL
    NGROK_URL=$(curl -s http://localhost:4040/api/tunnels | grep -o '"public_url":"https://[^"]*' | head -1 | cut -d'"' -f4)
    
    if [ -n "$NGROK_URL" ]; then
        echo ""
        echo -e "${BLUE}=========================================${NC}"
        echo -e "${BLUE}  遠程訪問 (Ngrok)${NC}"
        echo -e "${BLUE}=========================================${NC}"
        echo ""
        echo -e "  🌍 外網網址: ${GREEN}${NGROK_URL}${NC}"
        echo ""
        echo -e "${YELLOW}  💡 用這個網址可以從手機或任何地方訪問！${NC}"
        echo ""
        echo -e "  Ngrok Dashboard: ${GREEN}http://localhost:4040${NC}"
        echo ""
    else
        echo -e "${YELLOW}⚠️  無法取得 ngrok URL，請手動檢查 http://localhost:4040${NC}"
    fi
fi

# 顯示控制指令
echo -e "${BLUE}=========================================${NC}"
echo -e "${BLUE}  控制指令${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""
echo "  停止服務: $0 stop"
echo "  重啟服務: $0 restart"
echo "  查看狀態: $0 status"
echo "  查看日誌: tail -f $HOME/.ai-dev-logs/web-server.log"
echo ""

# 監聽中斷信號
trap 'echo -e "\n${YELLOW}收到中斷信號，停止服務...${NC}"; kill $WEB_PID 2>/dev/null; [ "$USE_NGROK" = true ] && kill $NGROK_PID 2>/dev/null; exit 0' INT TERM

# 保持運行
echo -e "${GREEN}服務運行中... 按 Ctrl+C 停止${NC}"
echo ""

# 如果是前台模式，等待
if [ "$DAEMON_MODE" = false ]; then
    wait $WEB_PID
else
    echo -e "${GREEN}✓ 服務已在背景運行${NC}"
fi
