#!/bin/bash

set -e

echo "=========================================="
echo "서버 모니터링 시스템 설치 스크립트"
echo "=========================================="
echo ""

# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 설치 디렉토리
INSTALL_DIR="${1:-/home/server-monitoring}"

echo -e "${GREEN}설치 디렉토리: $INSTALL_DIR${NC}"
echo ""

# 디렉토리 생성
mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"

# 패키지 다운로드
echo -e "${YELLOW}패키지 다운로드 중...${NC}"
PACKAGE_URL="${PACKAGE_URL:-https://download.gosky.kr/package.tar.gz}"

if [ -f "package.tar.gz" ]; then
    echo "로컬 패키지 파일 발견: package.tar.gz"
    tar -xzf package.tar.gz
else
    echo "패키지 다운로드: $PACKAGE_URL"
    curl -L "$PACKAGE_URL" -o package.tar.gz
    if [ ! -f "package.tar.gz" ] || [ ! -s "package.tar.gz" ]; then
        echo -e "${RED}패키지 다운로드에 실패했습니다.${NC}"
        exit 1
    fi
    tar -xzf package.tar.gz
    rm package.tar.gz
fi

echo -e "${GREEN}패키지 압축 해제 완료${NC}"
echo ""

# Node.js 버전 확인
echo -e "${YELLOW}Node.js 버전 확인 중...${NC}"
if ! command -v node &> /dev/null; then
    echo -e "${RED}Node.js가 설치되어 있지 않습니다.${NC}"
    echo "Node.js 18 이상을 설치해주세요."
    exit 1
fi

NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
    echo -e "${YELLOW}경고: Node.js 18 이상을 권장합니다. (현재: $(node -v))${NC}"
fi

# Python 버전 확인
echo -e "${YELLOW}Python 버전 확인 중...${NC}"
if ! command -v python3 &> /dev/null; then
    echo -e "${RED}Python 3가 설치되어 있지 않습니다.${NC}"
    exit 1
fi

# MySQL 클라이언트 확인
echo -e "${YELLOW}MySQL 클라이언트 확인 중...${NC}"
if ! command -v mysql &> /dev/null; then
    echo -e "${YELLOW}경고: MySQL 클라이언트가 없습니다. 데이터베이스 설정은 수동으로 해야 합니다.${NC}"
fi

echo ""
echo -e "${GREEN}환경 확인 완료${NC}"
echo ""

# 백엔드 설치
echo -e "${YELLOW}[1/3] 백엔드 설치 중...${NC}"
cd "$INSTALL_DIR/server-monitoring-api"
npm install
npx prisma generate
echo -e "${GREEN}백엔드 설치 완료${NC}"
echo ""

# 대시보드 설치
echo -e "${YELLOW}[2/3] 대시보드 설치 중...${NC}"
cd "$INSTALL_DIR/dashboard"
npm install
echo -e "${GREEN}대시보드 설치 완료${NC}"
echo ""

# 에이전트 설치
echo -e "${YELLOW}[3/3] 에이전트 설치 중...${NC}"
cd "$INSTALL_DIR/agent"
if [ ! -d "venv" ]; then
    python3 -m venv venv
fi
source venv/bin/activate
pip install -q -r requirements.txt
echo -e "${GREEN}에이전트 설치 완료${NC}"
echo ""

# 환경 변수 파일 생성
echo -e "${YELLOW}환경 변수 파일 생성 중...${NC}"

# 백엔드 .env
if [ ! -f "$INSTALL_DIR/server-monitoring-api/.env" ]; then
    cat > "$INSTALL_DIR/server-monitoring-api/.env" << 'EOF'
# Database
DATABASE_URL="mysql://monitoring_user:fix0630!!@49.163.165.16:3306/server_monitoring"

# JWT
JWT_SECRET="your-secret-key-change-in-production"

# Server
PORT=3000

# Admin Auth
ADMIN_EMAIL=gosky@gosky.kr
ADMIN_PASSWORD=studio0630!!
EOF
    echo -e "${GREEN}백엔드 .env 파일 생성 완료${NC}"
else
    echo "백엔드 .env 파일이 이미 존재합니다."
fi

# 대시보드 .env
if [ ! -f "$INSTALL_DIR/dashboard/.env" ]; then
    cat > "$INSTALL_DIR/dashboard/.env" << 'EOF'
# Admin Auth
ADMIN_EMAIL=gosky@gosky.kr
ADMIN_PASSWORD=studio0630!!
NEXT_PUBLIC_API_BASE_URL=http://localhost:3000/api
NEXT_PUBLIC_WS_URL=ws://localhost:3000/ws/client
EOF
    echo -e "${GREEN}대시보드 .env 파일 생성 완료${NC}"
else
    echo "대시보드 .env 파일이 이미 존재합니다."
fi

# 에이전트 .env
if [ ! -f "$INSTALL_DIR/agent/.env" ]; then
    cat > "$INSTALL_DIR/agent/.env" << 'EOF'
BACKEND_WS_URL=ws://localhost:3000/ws/agent
AGENT_ID=my-server-1
EOF
    echo -e "${GREEN}에이전트 .env 파일 생성 완료${NC}"
else
    echo "에이전트 .env 파일이 이미 존재합니다."
fi

echo ""
echo -e "${GREEN}=========================================="
echo "설치 완료!"
echo "==========================================${NC}"
echo ""
echo "다음 단계:"
echo ""
echo "1. 데이터베이스 테이블 생성:"
echo "   cd $INSTALL_DIR/server-monitoring-api"
echo "   mysql -h 49.163.165.16 -P 3306 -u monitoring_user -p'fix0630!!' server_monitoring < create_tables.sql"
echo ""
echo "2. 백엔드 실행:"
echo "   cd $INSTALL_DIR/server-monitoring-api"
echo "   npm run dev"
echo ""
echo "3. 대시보드 실행:"
echo "   cd $INSTALL_DIR/dashboard"
echo "   PORT=3001 npm run dev"
echo ""
echo "4. 에이전트 실행:"
echo "   cd $INSTALL_DIR/agent"
echo "   source venv/bin/activate"
echo "   python agent.py"
echo ""
echo "대시보드 접속: http://localhost:3001"
echo "로그인: gosky@gosky.kr / studio0630!!"
echo ""

