@echo off
chcp 949 > nul
setlocal enabledelayedexpansion
title 도교육청 Office 정품 인증 도구 (MAK)
mode con cols=120 lines=30
color 1F

REM ============================================================
REM  자식(승격된) 프로세스 감지
REM ============================================================
if /i "%~1"=="--elevated" goto :_elevated_child

REM ============================================================
REM  최초 실행 - 관리자 권한 확인
REM ============================================================
fsutil dirty query %systemdrive% >nul 2>&1
if %errorlevel% EQU 0 goto :_isAdmin

REM ----- 비관리자: 승격 요청 -----
echo.
echo   ============================================================
echo     관리자 권한이 필요합니다. UAC 창에서 [예]를 눌러 주세요.
echo   ============================================================
echo.
echo   PowerShell + cmd /k 방식으로 새 콘솔을 시작합니다...
echo.

powershell.exe -NoProfile -Command "try { Start-Process cmd.exe -ArgumentList @('/k', '\"%~f0\"', '--elevated') -WorkingDirectory '%~dp0' -Verb RunAs -ErrorAction Stop } catch { Write-Host ('PS error: ' + $_.Exception.Message); exit 1 }"
if %errorlevel% NEQ 0 (
    echo.
    echo   PowerShell 호출이 실패했습니다.
    pause
    exit /b 1
)

echo   승격 요청 전송 완료. 새 콘솔 창을 확인하세요.
timeout /t 5 /nobreak >nul
exit /b

REM ============================================================
REM  승격된 자식 프로세스 진입점
REM ============================================================
:_elevated_child
echo.
echo   ============================================================
echo     [승격된 자식 프로세스] 권한 상태 확인 중...
echo   ============================================================
echo.
echo   사용자명: %USERNAME%
echo   스크립트: %~f0
echo   작업폴더: %cd%
echo.

fsutil dirty query %systemdrive% >nul 2>&1
if %errorlevel% NEQ 0 (
    echo   [경고] 자식 프로세스가 관리자 권한을 받지 못했습니다.
    echo.
    echo   가능한 원인:
    echo     - UAC가 비활성화되어 있는데 현재 계정이 Administrators 그룹에 속하지 않음
    echo     - 그룹 정책이 권한 승격을 차단
    echo     - AppLocker/SmartScreen이 스크립트 실행을 차단
    echo.
    echo   해결 방법:
    echo     - 관리자 계정으로 로그인한 뒤 다시 실행
    echo     - Office.cmd 마우스 오른쪽 클릭하여 "관리자 권한으로 실행" 선택
    echo.
    echo   이 창은 자동으로 닫히지 않습니다. 확인 후 직접 닫아 주세요.
    echo.
    pause
    goto :eof
)

echo   관리자 권한 확인 완료.
echo.
goto :_isAdmin

:_isAdmin
cd /d "%~dp0"

REM ============================================================
REM  ospp.vbs 경로 자동 탐색
REM ============================================================
set "OSPP="
if exist "C:\Program Files\Microsoft Office\Office16\ospp.vbs"        set "OSPP=C:\Program Files\Microsoft Office\Office16\ospp.vbs"
if exist "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs"  set "OSPP=C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs"

if not defined OSPP (
    echo.
    echo   Office가 설치되어 있지 않거나 ospp.vbs를 찾을 수 없습니다.
    echo   Office Volume License 버전 2016~2024가 설치되어야 합니다.
    echo.
    echo   확인한 경로:
    echo     C:\Program Files\Microsoft Office\Office16\ospp.vbs
    echo     C:\Program Files [x86]\Microsoft Office\Office16\ospp.vbs
    echo.
    echo   이 창은 자동으로 닫히지 않습니다.
    pause
    goto :eof
)

REM ============================================================
REM  도교육청 MAK 라이선스 키
REM ============================================================
set "KEY2016=CNFPF-R6QCX-MBBY9-XBJRM-92FHM"
set "KEY2019=G2PYD-NPBPG-9B976-QY6GK-TF6T3"
set "KEY2021=3NPV9-QT2CB-TJ37M-JF9Y2-XTR2X"
set "KEY2024=TFKMN-Y99YY-JD8TX-2P9T6-J2VGD"

:_main
cls
echo.
echo   ============================================================
echo                  도교육청 Office 정품 인증 도구 [MAK]
echo   ============================================================
echo.
echo   [현재 설치된 Office 라이선스 정보]
cscript //nologo "%OSPP%" /dstatus 2>nul | findstr /i "LICENSE NAME"
cscript //nologo "%OSPP%" /dstatus 2>nul | findstr /i "Last 5"
echo.
echo   ------------------------------------------------------------
echo     1. Office 2016 MAK 인증
echo     2. Office 2019 MAK 인증
echo     3. Office 2021 MAK 인증
echo     4. Office 2024 MAK 인증
echo     5. 설치된 Office 자동 감지 후 인증 [권장]
echo     6. 현재 인증 상태 자세히 보기
echo     7. 종료
echo   ------------------------------------------------------------
echo.

set "choice="
set /p "choice=   번호 입력 : "

if "%choice%"=="1" ( set "TARGET_VER=2016" & set "TARGET_KEY=%KEY2016%" & goto _activate )
if "%choice%"=="2" ( set "TARGET_VER=2019" & set "TARGET_KEY=%KEY2019%" & goto _activate )
if "%choice%"=="3" ( set "TARGET_VER=2021" & set "TARGET_KEY=%KEY2021%" & goto _activate )
if "%choice%"=="4" ( set "TARGET_VER=2024" & set "TARGET_KEY=%KEY2024%" & goto _activate )
if "%choice%"=="5" goto _autodetect
if "%choice%"=="6" goto _status
if "%choice%"=="7" goto :eof
goto _main

:_autodetect
cscript //nologo "%OSPP%" /dstatus 2>nul > "%temp%\ospp_st.txt"
findstr /i "Office24" "%temp%\ospp_st.txt" >nul && ( set "TARGET_VER=2024" & set "TARGET_KEY=%KEY2024%" & del "%temp%\ospp_st.txt" & goto _activate )
findstr /i "Office21" "%temp%\ospp_st.txt" >nul && ( set "TARGET_VER=2021" & set "TARGET_KEY=%KEY2021%" & del "%temp%\ospp_st.txt" & goto _activate )
findstr /i "Office19" "%temp%\ospp_st.txt" >nul && ( set "TARGET_VER=2019" & set "TARGET_KEY=%KEY2019%" & del "%temp%\ospp_st.txt" & goto _activate )
findstr /i "Office16" "%temp%\ospp_st.txt" >nul && ( set "TARGET_VER=2016" & set "TARGET_KEY=%KEY2016%" & del "%temp%\ospp_st.txt" & goto _activate )
del "%temp%\ospp_st.txt" >nul 2>&1
echo.
echo   Office 버전을 자동 감지하지 못했습니다. 메뉴에서 직접 선택하세요.
echo.
pause
goto _main

:_activate
cls
echo.
echo   ============================================================
echo     Office %TARGET_VER% MAK 정품 인증 시작
echo     사용할 키 : %TARGET_KEY%
echo   ============================================================
echo.

echo   [1/3] 기존 등록된 제품 키 제거 중...
set "OLDKEY5="
for /f "tokens=*" %%a in ('cscript //nologo "%OSPP%" /dstatus 2^>nul ^| findstr /i "Last 5"') do (
    set "LINE=%%a"
    set "OLDKEY5=!LINE:~-5!"
)
if defined OLDKEY5 (
    echo         기존 키 마지막 5자리 : !OLDKEY5!
    cscript //nologo "%OSPP%" /unpkey:!OLDKEY5!
) else (
    echo         등록된 기존 키 없음. 건너뜁니다.
)
echo.

echo   [2/3] 새 MAK 키 입력 중...
cscript //nologo "%OSPP%" /inpkey:%TARGET_KEY%
if errorlevel 1 (
    echo.
    echo   키 입력에 실패했습니다.
    echo   설치된 Office 에디션과 키가 호환되지 않을 수 있습니다.
    echo.
    pause
    goto _main
)
echo.

echo   [3/3] Microsoft 정품 인증 서버로 온라인 인증 진행 중...
echo         인터넷 연결이 필요합니다. 잠시 기다려 주세요...
cscript //nologo "%OSPP%" /act
echo.

echo   ============================================================
echo     인증 결과
echo   ============================================================
cscript //nologo "%OSPP%" /dstatus 2>nul | findstr /i "LICENSE NAME"
cscript //nologo "%OSPP%" /dstatus 2>nul | findstr /i "LICENSE STATUS"
cscript //nologo "%OSPP%" /dstatus 2>nul | findstr /i "Last 5"
echo.
echo   * LICENSE STATUS가 ---LICENSED--- 로 표시되면 정상 인증 완료입니다.
echo.
pause
goto _main

:_status
cls
echo.
echo   ============================================================
echo     현재 Office 라이선스 상태 [전체]
echo   ============================================================
echo.
cscript //nologo "%OSPP%" /dstatus
echo.
pause
goto _main
