#!/bin/bash
# =============================================================================
# InsuWiki Firebase 배포 스크립트
# =============================================================================
# 
# 사용법:
#   ./scripts/deploy.sh [옵션]
#
# 옵션:
#   --rules      Firestore 규칙만 배포
#   --indexes    Firestore 인덱스만 배포
#   --functions  Cloud Functions만 배포
#   --all        전체 배포 (기본값)
#   --dry-run    배포 없이 검증만
#
# 필수 환경변수:
#   - GEMINI_API_KEY: Gemini API 키 (Cloud Functions용)
#   - GOOGLE_DRIVE_FOLDER_ID: Google Drive 폴더 ID
#
# 시크릿 설정:
#   firebase functions:secrets:set GEMINI_API_KEY
#   firebase functions:secrets:set GOOGLE_DRIVE_FOLDER_ID
# =============================================================================

set -e

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

# 프로젝트 루트 디렉토리
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$PROJECT_ROOT"

# 기본값
DEPLOY_MODE="all"
DRY_RUN=false

# 인자 파싱
while [[ $# -gt 0 ]]; do
    case $1 in
        --rules)
            DEPLOY_MODE="rules"
            shift
            ;;
        --indexes)
            DEPLOY_MODE="indexes"
            shift
            ;;
        --functions)
            DEPLOY_MODE="functions"
            shift
            ;;
        --all)
            DEPLOY_MODE="all"
            shift
            ;;
        --dry-run)
            DRY_RUN=true
            shift
            ;;
        -h|--help)
            echo "InsuWiki Firebase 배포 스크립트"
            echo ""
            echo "사용법: $0 [옵션]"
            echo ""
            echo "옵션:"
            echo "  --rules      Firestore 규칙만 배포"
            echo "  --indexes    Firestore 인덱스만 배포"
            echo "  --functions  Cloud Functions만 배포"
            echo "  --all        전체 배포 (기본값)"
            echo "  --dry-run    배포 없이 검증만"
            echo ""
            echo "시크릿 설정:"
            echo "  firebase functions:secrets:set GEMINI_API_KEY"
            echo "  firebase functions:secrets:set GOOGLE_DRIVE_FOLDER_ID"
            exit 0
            ;;
        *)
            echo -e "${RED}알 수 없는 옵션: $1${NC}"
            exit 1
            ;;
    esac
done

echo -e "${BLUE}============================================================${NC}"
echo -e "${BLUE}  InsuWiki Firebase 배포${NC}"
echo -e "${BLUE}============================================================${NC}"
echo ""

# Firebase CLI 확인
if ! command -v firebase &> /dev/null; then
    echo -e "${RED}❌ Firebase CLI가 설치되지 않았습니다.${NC}"
    echo "npm install -g firebase-tools"
    exit 1
fi

# 시크릿 확인 (functions 배포 시)
if [[ "$DEPLOY_MODE" == "functions" || "$DEPLOY_MODE" == "all" ]]; then
    echo -e "${YELLOW}⚠️  시크릿 설정 확인 중...${NC}"
    
    # GEMINI_API_KEY 확인
    if ! firebase functions:secrets:access GEMINI_API_KEY &> /dev/null; then
        echo -e "${YELLOW}⚠️  GEMINI_API_KEY 시크릿이 설정되지 않았습니다.${NC}"
        echo "   다음 명령어로 설정하세요: firebase functions:secrets:set GEMINI_API_KEY"
    else
        echo -e "${GREEN}✅ GEMINI_API_KEY 시크릿 확인됨${NC}"
    fi
    
    echo ""
fi

# Dry-run 모드
if $DRY_RUN; then
    echo -e "${YELLOW}🔍 Dry-run 모드: 배포하지 않고 검증만 수행${NC}"
    echo ""
fi

# 배포 실행
case $DEPLOY_MODE in
    rules)
        echo -e "${BLUE}📦 Firestore 규칙 배포 중...${NC}"
        if $DRY_RUN; then
            firebase firestore:rules --debug
        else
            firebase deploy --only firestore:rules
        fi
        ;;
    indexes)
        echo -e "${BLUE}📦 Firestore 인덱스 배포 중...${NC}"
        if $DRY_RUN; then
            firebase firestore:indexes --debug
        else
            firebase deploy --only firestore:indexes
        fi
        ;;
    functions)
        echo -e "${BLUE}📦 Cloud Functions 배포 중...${NC}"
        if $DRY_RUN; then
            cd functions && npm run build
            echo -e "${GREEN}✅ Functions 빌드 완료 (배포 안 함)${NC}"
        else
            firebase deploy --only functions
        fi
        ;;
    all)
        echo -e "${BLUE}📦 전체 배포 중...${NC}"
        if $DRY_RUN; then
            echo -e "${YELLOW}  - Firestore 규칙 검증...${NC}"
            firebase firestore:rules --debug
            echo -e "${YELLOW}  - Firestore 인덱스 검증...${NC}"
            firebase firestore:indexes --debug
            echo -e "${YELLOW}  - Functions 빌드...${NC}"
            cd functions && npm run build
            echo -e "${GREEN}✅ 모든 검증 완료 (배포 안 함)${NC}"
        else
            firebase deploy
        fi
        ;;
esac

echo ""
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN}  배포 완료!${NC}"
echo -e "${GREEN}============================================================${NC}"
