#!/bin/bash
# InfoKeyword Firebase 프로젝트 생성 + 전체 설정 스크립트
# 사용법: bash /home/jay/workspace/teams/dev2/create-firebase-project.sh
#
# 이 스크립트는 사용자 인증이 필요합니다 (gcloud auth login)
# 서비스 계정으로는 GCP 프로젝트를 생성할 수 없으므로 사용자 로그인이 필요합니다.

set -euo pipefail

NEW_PROJECT_ID="infokeyword-j2h"
NEW_PROJECT_NAME="InfoKeyword"
OLD_PROJECT_ID="insuwiki-j2h"
REGION="asia-northeast3"
SA_EMAIL="anu2026@insuwiki-j2h.iam.gserviceaccount.com"
BILLING_ACCOUNT="01F099-BCE8BC-89A521"

echo "============================================================"
echo "InfoKeyword Firebase 프로젝트 생성 스크립트"
echo "============================================================"
echo ""

# Step 0: Check if user is logged in
echo "[Step 0] 사용자 인증 확인..."
CURRENT_ACCOUNT=$(gcloud config get-value account 2>/dev/null || echo "")
if echo "$CURRENT_ACCOUNT" | grep -q "iam.gserviceaccount.com"; then
    echo "현재 서비스 계정으로 로그인되어 있습니다: $CURRENT_ACCOUNT"
    echo "사용자 계정으로 로그인이 필요합니다."
    echo ""
    echo "다음 명령어를 실행하세요:"
    echo "  gcloud auth login --no-launch-browser"
    echo ""
    echo "위 명령 실행 후 이 스크립트를 다시 실행하세요."
    exit 1
fi
echo "✓ 사용자 계정: $CURRENT_ACCOUNT"

# Step 1: Create GCP Project
echo ""
echo "[Step 1] GCP 프로젝트 생성..."
if gcloud projects describe "$NEW_PROJECT_ID" >/dev/null 2>&1; then
    echo "✓ 프로젝트 $NEW_PROJECT_ID 이미 존재합니다."
else
    gcloud projects create "$NEW_PROJECT_ID" --name="$NEW_PROJECT_NAME" --quiet
    echo "✓ 프로젝트 $NEW_PROJECT_ID 생성 완료!"
fi

# Step 2: Link billing account
echo ""
echo "[Step 2] 빌링 계정 연결..."
gcloud billing projects link "$NEW_PROJECT_ID" --billing-account="$BILLING_ACCOUNT" --quiet 2>/dev/null || echo "  (빌링 연결 실패 - 수동으로 연결 필요할 수 있습니다)"
echo "✓ 빌링 계정 연결"

# Step 3: Grant SA access
echo ""
echo "[Step 3] 서비스 계정에 owner 권한 부여..."
gcloud projects add-iam-policy-binding "$NEW_PROJECT_ID" \
    --member="serviceAccount:$SA_EMAIL" \
    --role="roles/owner" \
    --quiet >/dev/null 2>&1
echo "✓ SA에 owner 권한 부여 완료"

# Step 4: Enable APIs
echo ""
echo "[Step 4] 필요한 API 활성화..."
APIS=(
    "firebase.googleapis.com"
    "firestore.googleapis.com"
    "identitytoolkit.googleapis.com"
    "firebaserules.googleapis.com"
    "serviceusage.googleapis.com"
    "cloudresourcemanager.googleapis.com"
)
for api in "${APIS[@]}"; do
    gcloud services enable "$api" --project="$NEW_PROJECT_ID" --quiet 2>/dev/null || true
    echo "  ✓ $api"
done

# Step 5: Add Firebase to project
echo ""
echo "[Step 5] Firebase 프로젝트 추가..."
TOKEN=$(gcloud auth print-access-token)
RESP=$(curl -s -X POST \
    "https://firebase.googleapis.com/v1beta1/projects/$NEW_PROJECT_ID:addFirebase" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d '{}')

if echo "$RESP" | grep -q '"name"'; then
    OP_NAME=$(echo "$RESP" | python3 -c "import json,sys; print(json.load(sys.stdin).get('name',''))")
    echo "  작업 시작: $OP_NAME"
    echo "  Firebase 추가 중... (30초 대기)"
    sleep 30
    echo "✓ Firebase 추가 완료"
else
    echo "  결과: $RESP"
    echo "  (이미 추가되었거나 잠시 후 완료됩니다)"
fi

# Step 6: Run the main automation script
echo ""
echo "[Step 6] 메인 자동화 스크립트 실행..."
echo "서비스 계정으로 전환하여 나머지 단계를 실행합니다."

# Switch back to SA for remaining operations
gcloud config set account "$SA_EMAIL" 2>/dev/null

echo ""
echo "이제 메인 스크립트를 실행하세요:"
echo "  python3 /home/jay/workspace/teams/dev2/firebase-setup.py"
echo ""
echo "============================================================"
echo "프로젝트 생성 완료! 메인 스크립트를 실행해주세요."
echo "============================================================"
