#!/bin/bash
# Quant Engine Web Service Deployment Script
# 목표: publish 폴더를 웹 서버에 배포

set -e

# 설정
SOURCE_DIR="src/dotnet/QuantEngine.Web/publish"
DEPLOY_USER="kjh2064"
DEPLOY_HOST="178.104.200.7"
DEPLOY_PATH="/var/www/quant"
SSH_KEY="${HOME}/.ssh/id_ed25519"

echo "🚀 Quant Engine 웹 서비스 배포 시작"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "소스: $SOURCE_DIR"
echo "대상: $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# 1. 배포 폴더 생성/준비
echo ""
echo "📦 Step 1: 배포 폴더 준비..."
if [ ! -d "$SOURCE_DIR" ]; then
  echo "❌ 오류: publish 폴더 없음. 먼저 'dotnet publish -c Release'를 실행하세요"
  exit 1
fi

echo "✓ publish 폴더 크기: $(du -sh $SOURCE_DIR | cut -f1)"
echo "✓ 파일 수: $(find $SOURCE_DIR -type f | wc -l)"

# 2. SSH 연결 확인
echo ""
echo "🔐 Step 2: SSH 연결 확인..."
if [ ! -f "$SSH_KEY" ]; then
  echo "❌ SSH 키 없음: $SSH_KEY"
  exit 1
fi

ssh -i "$SSH_KEY" -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo '✓ SSH 연결 성공'" || {
  echo "❌ SSH 연결 실패"
  exit 1
}

# 3. 원격 백업
echo ""
echo "💾 Step 3: 원격 백업 생성..."
BACKUP_DIR="/var/www/quant_backup_$(date +%Y%m%d_%H%M%S)"
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \
  "sudo mkdir -p $DEPLOY_PATH && \
   if [ -d $DEPLOY_PATH/publish ]; then \
     sudo cp -r $DEPLOY_PATH/publish $BACKUP_DIR; \
     echo '✓ 백업 생성: $BACKUP_DIR'; \
   else \
     echo '✓ 기존 배포 없음'; \
   fi"

# 4. 배포
echo ""
echo "📤 Step 4: 파일 전송 중... (이 작업은 시간이 걸릴 수 있습니다)"
rsync -av -e "ssh -i $SSH_KEY" \
  --delete \
  "$SOURCE_DIR/" \
  "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/publish/" \
  || {
    echo "❌ 배포 실패"
    exit 1
  }

echo "✓ 파일 전송 완료"

# 5. 권한 설정
echo ""
echo "🔧 Step 5: 원격 권한 설정..."
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \
  "sudo chown -R www-data:www-data $DEPLOY_PATH/publish && \
   sudo chmod -R 755 $DEPLOY_PATH/publish && \
   echo '✓ 권한 설정 완료'"

# 6. 웹 서버 재시작
echo ""
echo "🔄 Step 6: 웹 서버 재시작 중..."
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \
  "sudo systemctl restart nginx && \
   sleep 2 && \
   sudo systemctl status nginx | grep Active && \
   echo '✓ nginx 재시작 완료'" \
  || {
    echo "⚠️  nginx 재시작 실패 (수동으로 확인 필요)"
  }

# 7. 배포 확인
echo ""
echo "🧪 Step 7: 배포 확인..."
sleep 2
HEALTH_URL="http://178.104.200.7/quant/"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$HEALTH_URL" || echo "000")

if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ 배포 성공! URL: $HEALTH_URL"
elif [ "$HTTP_CODE" = "301" ] || [ "$HTTP_CODE" = "302" ]; then
  echo "✓ 배포 완료 (리다이렉트: $HTTP_CODE)"
else
  echo "⚠️  HTTP 상태: $HTTP_CODE (nginx 설정 확인 필요)"
fi

# 8. 최종 보고
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ 배포 완료!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 배포 정보:"
echo "  웹사이트: http://178.104.200.7/quant/"
echo "  배포 경로: $DEPLOY_PATH/publish"
echo "  백업 위치: $BACKUP_DIR (필요시)"
echo ""
echo "🔍 로그 확인:"
echo "  ssh $DEPLOY_USER@$DEPLOY_HOST"
echo "  sudo tail -f /var/log/nginx/error.log"
echo "  sudo tail -f /var/log/nginx/access.log"
echo ""

exit 0
