@echo off
setlocal EnableExtensions EnableDelayedExpansion
title 바이브코딩 교육 사전 준비

set "CLAUDE_DIR=%USERPROFILE%\.local\bin"
set "CLAUDE_EXE=%CLAUDE_DIR%\claude.exe"
set "PATH=%CLAUDE_DIR%;%ProgramFiles%\Git\cmd;%ProgramFiles%\nodejs;%APPDATA%\npm;%PATH%"
set "SKIP_GIT=0"
set "SKIP_NODE=0"
set "SKIP_GH=0"
set "SKIP_VERCEL=0"
set "SKIP_SUPACLI=0"

cls
echo ============================================================
echo   바이브코딩 교육 - 사전 준비 (전체 한 번에)
echo ============================================================
echo.
echo 이 파일 하나로 교육 준비가 모두 끝납니다.
echo.
echo   1단계  기본 도구 설치      Git, Node.js
echo   2단계  Claude Code 설치와 로그인
echo   3단계  계정 가입          GitHub, Vercel, Supabase
echo   4단계  명령 도구 설치와 로그인   gh, vercel, supabase
echo   5단계  최종 점검
echo.
echo 관리자 권한은 필요하지 않습니다.
echo 비밀번호, 이메일 인증, 권한 승인은 본인이 직접 합니다.
echo 결제 정보를 요구하는 화면이 나오면 입력하지 말고 교육 담당자에게 알려주세요.
echo.
echo 준비물: 이메일을 확인할 수 있는 휴대폰 또는 웹메일
echo 예상 시간: 약 40분
echo.
choice /C YN /N /M "지금 시작하시겠습니까? [Y/N]: "
if errorlevel 2 goto CANCELLED

where powershell.exe >nul 2>&1
if not %errorlevel%==0 goto NO_POWERSHELL

rem ========================================================
rem  1단계 - 기본 도구
rem ========================================================
:STEP1
cls
echo ============================================================
echo   [1/5] 기본 도구를 설치합니다
echo ============================================================
echo.
echo Git과 Node.js는 앱을 만들고 올릴 때 쓰는 바탕 도구입니다.
echo 이미 설치되어 있으면 건너뜁니다.
echo.

echo   - Git 확인 중...
where git >nul 2>&1
if %errorlevel%==0 goto GIT_DONE
echo     Git이 없어 설치를 시작합니다. 잠시 기다려주세요.
where winget >nul 2>&1
if not %errorlevel%==0 goto GIT_MANUAL
winget install --id Git.Git -e --source winget --accept-package-agreements --accept-source-agreements --silent
set "PATH=%ProgramFiles%\Git\cmd;%PATH%"
where git >nul 2>&1
if %errorlevel%==0 goto GIT_DONE

:GIT_MANUAL
echo.
echo     자동 설치가 되지 않아 다운로드 페이지를 엽니다.
echo     내려받은 설치 파일을 실행하고, 물어보는 항목은 모두 기본값으로 두세요.
start "" "https://git-scm.com/download/win"
echo.
choice /C YN /N /M "     Git 설치를 마쳤습니까? [Y/N]: "
if errorlevel 2 goto GIT_SKIP
set "PATH=%ProgramFiles%\Git\cmd;%PATH%"
where git >nul 2>&1
if %errorlevel%==0 goto GIT_DONE

:GIT_SKIP
set "SKIP_GIT=1"
echo     Git을 건너뜁니다. 마지막 점검에서 다시 알려드립니다.
goto NODE_CHECK

:GIT_DONE
echo     Git 준비됨
echo.

:NODE_CHECK
echo   - Node.js 확인 중...
where node >nul 2>&1
if %errorlevel%==0 goto NODE_DONE
echo     Node.js가 없어 설치를 시작합니다. 잠시 기다려주세요.
where winget >nul 2>&1
if not %errorlevel%==0 goto NODE_MANUAL
winget install --id OpenJS.NodeJS.LTS -e --source winget --accept-package-agreements --accept-source-agreements --silent
set "PATH=%ProgramFiles%\nodejs;%APPDATA%\npm;%PATH%"
where node >nul 2>&1
if %errorlevel%==0 goto NODE_DONE

:NODE_MANUAL
echo.
echo     자동 설치가 되지 않아 다운로드 페이지를 엽니다.
echo     LTS 라고 적힌 쪽을 내려받아 설치하고, 물어보는 항목은 모두 기본값으로 두세요.
start "" "https://nodejs.org/ko/download"
echo.
choice /C YN /N /M "     Node.js 설치를 마쳤습니까? [Y/N]: "
if errorlevel 2 goto NODE_SKIP
set "PATH=%ProgramFiles%\nodejs;%APPDATA%\npm;%PATH%"
where node >nul 2>&1
if %errorlevel%==0 goto NODE_DONE

:NODE_SKIP
set "SKIP_NODE=1"
echo     Node.js를 건너뜁니다. 마지막 점검에서 다시 알려드립니다.
goto STEP2

:NODE_DONE
echo     Node.js 준비됨
echo.

rem ========================================================
rem  2단계 - Claude Code
rem ========================================================
:STEP2
echo.
echo ============================================================
echo   [2/5] Claude Code를 설치하고 로그인합니다
echo ============================================================
echo.

if exist "%CLAUDE_EXE%" goto CLAUDE_PATH
echo   설치를 시작합니다...
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference='Stop'; [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; try { irm https://claude.ai/install.ps1 | iex; exit 0 } catch { Write-Host ''; Write-Host '설치 오류:' $_.Exception.Message -ForegroundColor Red; exit 1 }"
if not %errorlevel%==0 goto INSTALL_FAILED

:CLAUDE_PATH
echo   실행 경로를 설정합니다...
set "PATH=%CLAUDE_DIR%;%PATH%"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$d=Join-Path $env:USERPROFILE '.local\bin'; $p=[Environment]::GetEnvironmentVariable('PATH','User'); if ([string]::IsNullOrWhiteSpace($p)) { [Environment]::SetEnvironmentVariable('PATH',$d,'User') } elseif (($p -split ';') -notcontains $d) { [Environment]::SetEnvironmentVariable('PATH',($p.TrimEnd(';')+';'+$d),'User') }"
if not %errorlevel%==0 goto PATH_FAILED
if not exist "%CLAUDE_EXE%" goto BINARY_MISSING

echo   설치 상태를 점검합니다...
"%CLAUDE_EXE%" --version
if not %errorlevel%==0 goto VERIFY_FAILED
echo.

echo   로그인 상태를 확인합니다...
"%CLAUDE_EXE%" auth status --text >nul 2>&1
if %errorlevel%==0 goto STEP2_OK

echo.
echo   아직 로그인되어 있지 않습니다. 브라우저 로그인을 시작합니다.
echo   본인의 Claude 계정으로 로그인해주세요.
echo.
"%CLAUDE_EXE%" auth login
echo.
"%CLAUDE_EXE%" auth status --text >nul 2>&1
if %errorlevel%==0 goto STEP2_OK
goto LOGIN_INCOMPLETE

:STEP2_OK
echo   Claude Code 준비됨
echo.
echo 다음은 계정 가입입니다. 계속하려면 아무 키나 누르세요.
pause >nul

rem ========================================================
rem  3단계 - 계정 가입
rem ========================================================
:GITHUB
cls
echo ============================================================
echo   [3/5] 계정 가입 - GitHub (1/3)
echo ============================================================
echo.
echo 1. 곧 열리는 화면에서 GitHub 계정을 만드세요.
echo 2. 이메일 인증까지 완료하세요.
echo 3. 이미 계정이 있으면 로그인만 하세요.
echo.
echo 세 곳 모두 이 GitHub 계정 하나로 들어갑니다. 계정을 섞지 마세요.
echo.
start "" "https://github.com/signup"
if errorlevel 1 goto BROWSER_FAILED
echo 브라우저 작업이 끝난 뒤 이 창으로 돌아오세요.
echo.
choice /C YN /N /M "GitHub 가입과 이메일 인증을 마쳤습니까? [Y/N]: "
if errorlevel 2 goto GITHUB_RETRY

:VERCEL
cls
echo ============================================================
echo   [3/5] 계정 가입 - Vercel (2/3)
echo ============================================================
echo.
echo 1. GitHub로 계속하기 버튼을 누르세요.
echo 2. 방금 만든 GitHub 계정의 권한 요청을 확인하고 승인하세요.
echo 3. 요금제를 묻는다면 무료 Hobby를 선택하세요.
echo 4. 결제 정보를 요구하면 입력하지 말고 교육 담당자에게 알려주세요.
echo.
start "" "https://vercel.com/signup"
if errorlevel 1 goto BROWSER_FAILED
echo 브라우저 작업이 끝난 뒤 이 창으로 돌아오세요.
echo.
choice /C YN /N /M "Vercel 대시보드가 열렸습니까? [Y/N]: "
if errorlevel 2 goto VERCEL_RETRY

:SUPABASE
cls
echo ============================================================
echo   [3/5] 계정 가입 - Supabase (3/3)
echo ============================================================
echo.
echo 1. GitHub로 계속하기 버튼을 누르세요.
echo 2. 방금 만든 GitHub 계정의 권한 요청을 확인하고 승인하세요.
echo 3. 계정 대시보드가 열리면 완료입니다. 프로젝트는 만들지 마세요.
echo 4. 결제 정보를 요구하면 입력하지 말고 교육 담당자에게 알려주세요.
echo.
start "" "https://supabase.com/dashboard/sign-up"
if errorlevel 1 goto BROWSER_FAILED
echo 브라우저 작업이 끝난 뒤 이 창으로 돌아오세요.
echo.
choice /C YN /N /M "Supabase 대시보드가 열렸습니까? [Y/N]: "
if errorlevel 2 goto SUPABASE_RETRY

rem ========================================================
rem  4단계 - 명령 도구(CLI)
rem ========================================================
:STEP4
cls
echo ============================================================
echo   [4/5] 명령 도구를 설치하고 로그인합니다
echo ============================================================
echo.
echo 교육 당일 Claude Code가 브라우저 대신 이 도구들로 직접 올리고 배포합니다.
echo 지금 로그인까지 끝내두면 당일에 로그인 창이 뜨지 않습니다.
echo.

rem ---- GitHub CLI ----
echo   - GitHub CLI 확인 중...
where gh >nul 2>&1
if %errorlevel%==0 goto GH_LOGIN
where winget >nul 2>&1
if not %errorlevel%==0 goto GH_SKIP
echo     설치를 시작합니다. 잠시 기다려주세요.
winget install --id GitHub.cli -e --source winget --accept-package-agreements --accept-source-agreements --silent
set "PATH=%ProgramFiles%\GitHub CLI;%PATH%"
where gh >nul 2>&1
if not %errorlevel%==0 goto GH_SKIP

:GH_LOGIN
gh auth status >nul 2>&1
if %errorlevel%==0 goto GH_GITCFG
echo.
echo     GitHub 로그인을 시작합니다.
echo     화면에 나오는 여덟 자리 코드를 복사한 뒤, 브라우저에 붙여넣고 승인하세요.
echo.
gh auth login --web --hostname github.com --git-protocol https
gh auth status >nul 2>&1
if not %errorlevel%==0 goto GH_SKIP

:GH_GITCFG
gh auth setup-git >nul 2>&1
git config --global user.name >nul 2>&1
if %errorlevel%==0 goto GH_OK
for /f "delims=" %%i in ('gh api user --jq .login 2^>nul') do set "GH_USER=%%i"
if "!GH_USER!"=="" goto GH_OK
git config --global user.name "!GH_USER!"
git config --global user.email "!GH_USER!@users.noreply.github.com"
echo     Git 서명 정보를 설정했습니다: !GH_USER!

:GH_OK
echo     GitHub CLI 준비됨
echo.
goto VERCEL_CLI

:GH_SKIP
set "SKIP_GH=1"
echo     GitHub CLI를 건너뜁니다. 마지막 점검에서 다시 알려드립니다.
echo.

rem ---- Vercel CLI ----
:VERCEL_CLI
echo   - Vercel CLI 확인 중...
if "%SKIP_NODE%"=="1" goto VERCEL_SKIP
where vercel >nul 2>&1
if %errorlevel%==0 goto VERCEL_LOGIN
echo     설치를 시작합니다. 잠시 기다려주세요.
call npm install -g vercel
set "PATH=%APPDATA%\npm;%PATH%"
where vercel >nul 2>&1
if not %errorlevel%==0 goto VERCEL_SKIP

:VERCEL_LOGIN
call vercel whoami >nul 2>&1
if %errorlevel%==0 goto VERCEL_OK
echo.
echo     Vercel 로그인을 시작합니다.
echo     브라우저가 열리면 GitHub 계정으로 승인하세요.
echo.
call vercel login --github
call vercel whoami >nul 2>&1
if not %errorlevel%==0 goto VERCEL_SKIP

:VERCEL_OK
echo     Vercel CLI 준비됨
echo.
goto SUPABASE_CLI

:VERCEL_SKIP
set "SKIP_VERCEL=1"
echo     Vercel CLI를 건너뜁니다. 마지막 점검에서 다시 알려드립니다.
echo.

rem ---- Supabase CLI ----
:SUPABASE_CLI
echo   - Supabase CLI 확인 중...
where supabase >nul 2>&1
if %errorlevel%==0 goto SUPA_LOGIN
if exist "%USERPROFILE%\.local\bin\supabase.exe" goto SUPA_PATH
echo     내려받는 중입니다. 파일이 커서 1~3분 걸립니다.
set "SUPA_ARCH=amd64"
if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set "SUPA_ARCH=arm64"
set "SUPA_URL=https://github.com/supabase/cli/releases/latest/download/supabase_windows_%SUPA_ARCH%.tar.gz"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference='Stop'; [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; $d=Join-Path $env:USERPROFILE '.local\bin'; [void](New-Item -ItemType Directory -Force -Path $d); $t=Join-Path $env:TEMP 'supabase_cli.tar.gz'; try { Invoke-WebRequest -UseBasicParsing -Uri $env:SUPA_URL -OutFile $t; tar -xzf $t -C $d; exit 0 } catch { Write-Host ''; Write-Host '내려받기 오류:' $_.Exception.Message -ForegroundColor Red; exit 1 }"
if not %errorlevel%==0 goto SUPA_SKIP

:SUPA_PATH
set "PATH=%USERPROFILE%\.local\bin;%PATH%"
where supabase >nul 2>&1
if not %errorlevel%==0 goto SUPA_SKIP

:SUPA_LOGIN
call supabase projects list >nul 2>&1
if %errorlevel%==0 goto SUPA_OK
echo.
echo     Supabase 로그인을 시작합니다.
echo     Enter를 누르면 브라우저가 열립니다. 같은 GitHub 계정으로 승인하세요.
echo.
call supabase login
call supabase projects list >nul 2>&1
if not %errorlevel%==0 goto SUPA_SKIP

:SUPA_OK
echo     Supabase CLI 준비됨
echo.
goto STEP5

:SUPA_SKIP
set "SKIP_SUPACLI=1"
echo     Supabase CLI를 건너뜁니다. 마지막 점검에서 다시 알려드립니다.
echo.

rem ========================================================
rem  5단계 - 최종 점검
rem ========================================================
:STEP5
echo.
echo 마지막 점검입니다. 계속하려면 아무 키나 누르세요.
pause >nul
cls
echo ============================================================
echo   [5/5] 최종 점검
echo ============================================================
echo.
echo  설치된 도구
echo  ------------------------------------------------------------
git --version 2>nul || echo   Git          : 확인 안 됨
node --version 2>nul || echo   Node.js      : 확인 안 됨
"%CLAUDE_EXE%" --version 2>nul || echo   Claude Code  : 확인 안 됨
gh --version 2>nul | findstr /B "gh version" || echo   GitHub CLI   : 확인 안 됨
call vercel --version 2>nul || echo   Vercel CLI   : 확인 안 됨
call supabase --version 2>nul || echo   Supabase CLI : 확인 안 됨
echo  ------------------------------------------------------------
echo.
echo  로그인 상태
gh auth status 2>&1 | findstr /C:"Logged in" || echo    GitHub   : 확인 안 됨
call vercel whoami 2>nul || echo    Vercel   : 확인 안 됨
call supabase projects list >nul 2>&1 && echo    Supabase : 로그인됨 || echo    Supabase : 확인 안 됨
echo.
if "%SKIP_GIT%"=="1" echo  [주의] Git이 설치되지 않았습니다.
if "%SKIP_NODE%"=="1" echo  [주의] Node.js가 설치되지 않았습니다.
if "%SKIP_GH%"=="1" echo  [주의] GitHub CLI 준비가 끝나지 않았습니다.
if "%SKIP_VERCEL%"=="1" echo  [주의] Vercel CLI 준비가 끝나지 않았습니다.
if "%SKIP_SUPACLI%"=="1" echo  [주의] Supabase CLI 준비가 끝나지 않았습니다.
echo.
echo ============================================================
echo   교육 준비 완료
echo ============================================================
echo.
echo 교육 당일에는 PowerShell을 열고 아래 명령만 입력하면 됩니다.
echo.
echo     claude
echo.
echo 교육 당일에도 오늘 사용한 같은 GitHub 계정으로 로그인하세요.
echo 이 화면을 캡처해서 교육 담당자에게 보내주세요.
echo [주의] 라고 적힌 줄이 있으면 반드시 함께 보내주세요.
echo.
echo.
echo ============================================================
echo   마지막으로, 스스로 확인해 보세요
echo ============================================================
echo.
set "DESK=%USERPROFILE%\Desktop"
if not exist "%DESK%" set "DESK=%USERPROFILE%\OneDrive\바탕 화면"
if not exist "%DESK%" set "DESK=%USERPROFILE%\OneDrive\Desktop"
if not exist "%DESK%" set "DESK=%USERPROFILE%"
set "CHECK_TXT=%DESK%\바이브코딩_점검_프롬프트.txt"
>"%CHECK_TXT%" echo 내 컴퓨터에 바이브코딩 수업 준비물이 다 깔렸는지 확인해줘.
>>"%CHECK_TXT%" echo git, node, npm, gh, vercel, supabase 여섯 가지의 버전을 하나씩 확인하고,
>>"%CHECK_TXT%" echo gh 와 vercel 과 supabase 는 로그인까지 됐는지도 봐줘.
>>"%CHECK_TXT%" echo 결과를 표 없이 한 줄씩 '이름 : 준비됨 / 안 됨' 으로 알려주고,
>>"%CHECK_TXT%" echo 안 된 것이 있으면 비개발자가 따라 할 수 있게 쉬운 말로
>>"%CHECK_TXT%" echo 다음에 뭘 하면 되는지 알려줘.
echo  바탕화면에 '바이브코딩_점검_프롬프트.txt' 를 만들어 두었습니다.
echo  잠시 뒤 그 파일이 저절로 열립니다.
echo.
echo  1. PowerShell 을 열고  claude  라고 입력해 클로드 코드를 켭니다.
echo  2. 열린 메모장의 글을 전부 복사해 클로드 코드에 붙여넣고 Enter를 누릅니다.
echo  3. 클로드가 여섯 가지를 하나씩 점검해서 결과를 알려줍니다.
echo.
echo  '안 됨' 이 하나라도 나오면 그 화면을 사진으로 찍어 보내주세요.
echo.
start "" notepad "%CHECK_TXT%"
echo ============================================================
echo.
echo 이 창은 닫아도 됩니다.
echo ============================================================
pause
exit /b 0

rem ========================================================
rem  되돌아가기
rem ========================================================
:GITHUB_RETRY
echo.
echo GitHub 가입은 이메일 인증까지 끝나야 완료됩니다.
echo 다시 진행하려면 아무 키나 누르세요.
pause >nul
goto GITHUB

:VERCEL_RETRY
echo.
echo Vercel 화면에서 GitHub로 계속하기를 선택하세요.
echo 다른 GitHub 계정이 보이면 로그아웃한 뒤 같은 계정으로 다시 진행하세요.
echo 다시 진행하려면 아무 키나 누르세요.
pause >nul
goto VERCEL

:SUPABASE_RETRY
echo.
echo Supabase 화면에서 GitHub로 계속하기를 선택하세요.
echo 다른 GitHub 계정이 보이면 로그아웃한 뒤 같은 계정으로 다시 진행하세요.
echo 다시 진행하려면 아무 키나 누르세요.
pause >nul
goto SUPABASE

rem ========================================================
rem  오류 안내
rem ========================================================
:LOGIN_INCOMPLETE
echo.
echo ============================================================
echo   Claude Code 로그인이 완료되지 않았습니다.
echo ============================================================
echo.
echo 설치는 정상입니다. 교육 전 PowerShell에서 아래 명령으로 로그인해주세요.
echo.
echo     claude auth login
echo.
choice /C YN /N /M "나머지 준비를 이어서 하시겠습니까? [Y/N]: "
if errorlevel 2 goto LOGIN_STOP
goto GITHUB

:LOGIN_STOP
echo.
echo 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
pause
exit /b 2

:NO_POWERSHELL
echo.
echo ============================================================
echo   준비를 시작할 수 없습니다.
echo ============================================================
echo Windows PowerShell을 찾지 못했습니다.
echo 교육 담당자에게 이 화면을 캡처해서 전달해주세요.
echo.
pause
exit /b 10

:INSTALL_FAILED
echo.
echo ============================================================
echo   Claude Code 설치에 실패했습니다.
echo ============================================================
echo.
echo 가능한 원인:
echo   - 회사 네트워크 또는 보안 프로그램이 다운로드를 차단함
echo   - PowerShell 실행이 회사 정책으로 제한됨
echo   - 인터넷 연결 문제
echo.
echo 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
echo 임의로 보안 설정을 변경하지 마세요.
echo.
pause
exit /b 11

:PATH_FAILED
echo.
echo ============================================================
echo   설치는 되었지만 실행 경로 설정에 실패했습니다.
echo ============================================================
echo 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
echo.
pause
exit /b 12

:BINARY_MISSING
echo.
echo ============================================================
echo   설치 프로그램은 끝났지만 claude.exe를 찾지 못했습니다.
echo ============================================================
echo 예상 위치: %CLAUDE_EXE%
echo 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
echo.
pause
exit /b 13

:VERIFY_FAILED
echo.
echo ============================================================
echo   Claude Code 실행 확인에 실패했습니다.
echo ============================================================
echo claude.exe는 있지만 정상 실행되지 않았습니다.
echo 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
echo.
pause
exit /b 14

:BROWSER_FAILED
echo.
echo ============================================================
echo   브라우저를 열지 못했습니다.
echo ============================================================
echo.
echo 기본 브라우저 설정을 확인한 뒤 파일을 다시 실행하세요.
echo 계속 안 되면 이 화면을 캡처해서 교육 담당자에게 전달해주세요.
echo.
pause
exit /b 15

:CANCELLED
echo.
echo 준비를 시작하지 않았습니다. 시간이 될 때 파일을 다시 실행하세요.
echo.
pause
exit /b 1
