@echo off
chcp 949 >nul
setlocal enabledelayedexpansion

REM ============================================================
REM  Phantom Eyes ·ÎÄÃ Eyes ¼³Ä¡/½ÇÇà ¹èÄ¡
REM  - ÀÎÀÚ ¾øÀÌ ½ÇÇà = ¼³Ä¡ ¸ðµå (°ü¸®ÀÚ ½Â°Ý + ¸ðµç ´Ü°è È­¸é Ç¥½Ã)
REM  - "RUN" ÀÎÀÚ     = ½ÇÇà ¸ðµå (ÄÜ¼Ö ¾øÀÌ ¿öÄ¿ ·çÇÁ. VBS ·Î ¼û°Ü ±¸µ¿)
REM    ½ÇÁ¦ ÀÛ¾÷ ½Ã¿¡´Â ÄÜ¼ÖÃ¢ÀÌ ¾ø°í ºê¶ó¿ìÀú¸¸ ¶á´Ù. ·Î±×´Â eyes.log ÆÄÀÏ.
REM ============================================================

set "SERVER=https://macbookpro-m1.tail6470b2.ts.net"
set "DIR=%LOCALAPPDATA%\PhantomEyes"
set "VPY=%DIR%\.venv\Scripts\python.exe"
REM ÇÑ±Û ·Î±×°¡ cp1252/cp949 ·Î ÀÎÄÚµùµÅ Á×Áö ¾Êµµ·Ï ÆÄÀÌ½ã IO ¸¦ UTF-8 ·Î °íÁ¤
set "PYTHONUTF8=1"
set "PYTHONIOENCODING=utf-8"

if /I "%~1"=="RUN" goto runmode

REM ============================================================
REM  ¼³Ä¡ ¸ðµå (ÄÜ¼Ö Ç¥½Ã - ¼³Ä¡ °úÁ¤À» ´«À¸·Î È®ÀÎ)
REM ============================================================
title Phantom Eyes - ¼³Ä¡

REM ¦¡¦¡ °ü¸®ÀÚ ±ÇÇÑ È®ÀÎ (¾øÀ¸¸é ½Â°Ý, ½Â°ÝÃ¢Àº ÄÜ¼Ö·Î ¿­¾î À¯Áö) ¦¡¦¡
net session >nul 2>&1
if %errorlevel% neq 0 (
  echo.
  echo   °ü¸®ÀÚ ±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù. UAC Ã¢¿¡¼­ "¿¹"¸¦ ´­·¯ÁÖ¼¼¿ä...
  powershell -NoProfile -Command "Start-Process -FilePath 'cmd.exe' -ArgumentList '/c','\"%~f0\"' -Verb RunAs"
  exit /b
)

cls
echo ==================================================
echo    Phantom Eyes - ·ÎÄÃ Eyes ¼³Ä¡
echo ==================================================
echo    ¼­¹ö   : %SERVER%
echo    ¼³Ä¡Æú´õ: %DIR%
echo ==================================================
echo.
if not exist "%DIR%" mkdir "%DIR%"
cd /d "%DIR%"

REM ¦¡¦¡ [1/6] ¼­¹ö ¿¬°á È®ÀÎ (Á¦ÀÏ ÈçÇÑ ½ÇÆÐ ÁöÁ¡) ¦¡¦¡
echo [1/6] °üÁ¦ ¼­¹ö ¿¬°á È®ÀÎ...
powershell -NoProfile -Command "try{ $r=Invoke-WebRequest -Uri '%SERVER%/api/version' -UseBasicParsing -TimeoutSec 20; Write-Host ('      OK  ' + $r.Content) }catch{ Write-Host ('      [½ÇÆÐ] ' + $_.Exception.Message); exit 1 }"
if errorlevel 1 (
  echo.
  echo   [Áß´Ü] °üÁ¦ ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù.
  echo      %SERVER%
  echo      - VM ÀÌ ÀÎÅÍ³Ý¿¡ ¿¬°áµÅ ÀÖ´ÂÁö È®ÀÎ
  echo      - ºê¶ó¿ìÀú·Î À§ ÁÖ¼Ò°¡ ¿­¸®´ÂÁö È®ÀÎ
  echo.
  pause
  exit /b 1
)
echo.

REM ¦¡¦¡ [2/6] Python (winget ¾ø¾îµµ python.org ¿¡¼­ Á÷Á¢ ¼³Ä¡) ¦¡¦¡
echo [2/6] Python È®ÀÎ...
set "PYEXE="
where python >nul 2>nul && set "PYEXE=python"
if defined PYEXE goto pydone

echo      Python ÀÌ ¾ø½À´Ï´Ù. ÀÚµ¿ ¼³Ä¡¸¦ ½ÃµµÇÕ´Ï´Ù...
where winget >nul 2>nul
if not errorlevel 1 (
  echo      winget À¸·Î ¼³Ä¡ Áß...
  winget install -e --id Python.Python.3.12 --accept-source-agreements --accept-package-agreements
  goto pyfind
)
echo      winget ¾øÀ½ - python.org ¿¡¼­ Á÷Á¢ ³»·Á¹Þ¾Æ ¼³Ä¡ÇÕ´Ï´Ù ^(1~2ºÐ ¼Ò¿ä^)...
powershell -NoProfile -Command "try{ Invoke-WebRequest -Uri 'https://www.python.org/ftp/python/3.12.7/python-3.12.7-amd64.exe' -OutFile \"$env:TEMP\pe_py.exe\" -UseBasicParsing -TimeoutSec 300; Write-Host '      ´Ù¿î·Îµå ¿Ï·á - ¼³Ä¡ ½ÃÀÛ' }catch{ Write-Host ('      [½ÇÆÐ] ' + $_.Exception.Message); exit 1 }"
if errorlevel 1 ( echo   [Áß´Ü] Python ´Ù¿î·Îµå ½ÇÆÐ ^(ÀÎÅÍ³Ý È®ÀÎ^) & pause & exit /b 1 )
echo      Python ¼³Ä¡ Áß ^(Á¶¿ëÈ÷ ÁøÇà, 1~2ºÐ^)...
"%TEMP%\pe_py.exe" /quiet InstallAllUsers=1 PrependPath=1 Include_launcher=1

:pyfind
set "PYEXE="
where python >nul 2>nul && set "PYEXE=python"
if not defined PYEXE if exist "%ProgramFiles%\Python312\python.exe" set "PYEXE=%ProgramFiles%\Python312\python.exe"
if not defined PYEXE if exist "%LocalAppData%\Programs\Python\Python312\python.exe" set "PYEXE=%LocalAppData%\Programs\Python\Python312\python.exe"
if not defined PYEXE (
  echo.
  echo      [!] Python ¼³Ä¡´Â ³¡³µÁö¸¸ PATH ¹Ý¿µ¿¡ Àç½ÃÀÛÀÌ ÇÊ¿äÇÕ´Ï´Ù.
  echo          ÀÌ Ã¢À» ´Ý°í ¼³Ä¡ bat À» ÇÑ ¹ø¸¸ ´õ ½ÇÇàÇÏ¼¼¿ä.
  pause
  exit /b
)

:pydone
if not defined PYEXE set "PYEXE=python"
"%PYEXE%" --version
echo      OK  Python ÁØºñµÊ
echo.

REM ¦¡¦¡ [3/6] Chrome ¦¡¦¡
echo [3/6] Chrome È®ÀÎ...
set "HASCHROME="
if exist "%ProgramFiles%\Google\Chrome\Application\chrome.exe" set "HASCHROME=1"
if exist "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" set "HASCHROME=1"
if exist "%LocalAppData%\Google\Chrome\Application\chrome.exe" set "HASCHROME=1"
if defined HASCHROME (
  echo      OK  ÀÌ¹Ì ¼³Ä¡µÊ
) else (
  echo      Chrome ÀÌ ¾ø½À´Ï´Ù. ¼³Ä¡¸¦ ½ÃµµÇÕ´Ï´Ù ^(winget^)...
  where winget >nul 2>nul && (
    winget install -e --id Google.Chrome --accept-source-agreements --accept-package-agreements
  ) || (
    echo      [°æ°í] ÀÚµ¿¼³Ä¡ ½ÇÆÐ - Chrome À» Á÷Á¢ ¼³Ä¡ÇÏ´Â °É ±ÇÀåÇÕ´Ï´Ù.
  )
)
echo.

REM ¦¡¦¡ [3.5/6] Visual C++ ·±Å¸ÀÓ (playwright/greenlet DLL ·Îµå¿¡ ÇÊ¼ö) ¦¡¦¡
echo [3.5/6] Visual C++ ·±Å¸ÀÓ È®ÀÎ...
if exist "%SystemRoot%\System32\vcruntime140_1.dll" (
  echo      OK  ÀÌ¹Ì ¼³Ä¡µÊ
) else (
  echo      VC++ ·±Å¸ÀÓÀÌ ¾ø¾î ¼³Ä¡ÇÕ´Ï´Ù ^(¾à 25MB, greenlet/playwright ¿¡ ÇÊ¿ä^)...
  powershell -NoProfile -Command "try{ Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vc_redist.x64.exe' -OutFile \"$env:TEMP\pe_vcredist.exe\" -UseBasicParsing -TimeoutSec 180; Write-Host '      ´Ù¿î·Îµå ¿Ï·á - ¼³Ä¡ ½ÃÀÛ' }catch{ Write-Host ('      [½ÇÆÐ] ' + $_.Exception.Message); exit 1 }"
  if errorlevel 1 ( echo   [Áß´Ü] VC++ ·±Å¸ÀÓ ´Ù¿î·Îµå ½ÇÆÐ ^(ÀÎÅÍ³Ý È®ÀÎ^) & pause & exit /b 1 )
  "%TEMP%\pe_vcredist.exe" /install /quiet /norestart
  if exist "%SystemRoot%\System32\vcruntime140_1.dll" (echo      OK  ¼³Ä¡ ¿Ï·á) else (echo      [°æ°í] ¼³Ä¡Çß´Âµ¥ DLL ¹ÌÈ®ÀÎ - °è¼Ó ÁøÇà)
)
echo.

REM ¦¡¦¡ [4/6] ÃÖ½Å ÄÚµå ¹Þ±â ¦¡¦¡
echo [4/6] ¼­¹ö¿¡¼­ ÃÖ½Å ÄÚµå ¹Þ±â...
powershell -NoProfile -Command "try{ Invoke-WebRequest -Uri '%SERVER%/download/code.zip' -OutFile '%DIR%\code.zip' -UseBasicParsing -TimeoutSec 60; Expand-Archive -Path '%DIR%\code.zip' -DestinationPath '%DIR%' -Force; Write-Host '      OK  ÄÚµå Àû¿ëµÊ' }catch{ Write-Host ('      [½ÇÆÐ] ' + $_.Exception.Message); exit 1 }"
if errorlevel 1 ( echo   [Áß´Ü] ÄÚµå ´Ù¿î·Îµå ½ÇÆÐ & pause & exit /b 1 )
if not exist "%DIR%\main.py" ( echo   [Áß´Ü] main.py °¡ ¾ø½À´Ï´Ù ^(¾ÐÃàÇØÁ¦ ½ÇÆÐ^) & pause & exit /b 1 )
if not exist "%DIR%\config.json" (
  > "%DIR%\config.json" echo {"server_url":"%SERVER%","worker_batch":3,"poll_interval":5,"heartbeat_interval":7,"idle_quit_seconds":120,"disable_images":true,"page_depth":10,"dwell_min":60,"dwell_max":180,"between_min":30,"between_max":90}
  echo      config.json »ý¼ºµÊ
)
echo.

REM ¦¡¦¡ [5/6] ÆÄÀÌ½ã È¯°æ + ÀÇÁ¸¼º (Ã³À½¿£ ¼ö ºÐ ¼Ò¿ä) ¦¡¦¡
echo [5/6] ÆÄÀÌ½ã È¯°æ/ÀÇÁ¸¼º ÁØºñ ^(Ã³À½¿£ ¸î ºÐ °É¸³´Ï´Ù^)...
if not exist "%VPY%" (
  echo      °¡»óÈ¯°æ »ý¼º...
  "%PYEXE%" -m venv "%DIR%\.venv"
  if errorlevel 1 ( echo      [½ÇÆÐ] °¡»óÈ¯°æ »ý¼º ½ÇÆÐ & pause & exit /b 1 )
)
"%VPY%" -c "import playwright, playwright_stealth" >nul 2>nul
if errorlevel 1 (
  echo      pip ¾÷±×·¹ÀÌµå...
  "%VPY%" -m pip install --upgrade pip
  echo      ÀÇÁ¸¼º ¼³Ä¡ ^(playwright, playwright-stealth^)...
  "%VPY%" -m pip install -r "%DIR%\requirements.txt"
  if errorlevel 1 ( echo      [½ÇÆÐ] ÀÇÁ¸¼º ¼³Ä¡ ½ÇÆÐ & pause & exit /b 1 )
) else (
  echo      ÀÇÁ¸¼º ÀÌ¹Ì ¼³Ä¡µÊ
)
echo      WebKit ºê¶ó¿ìÀú È®ÀÎ/¼³Ä¡...
"%VPY%" -m playwright install webkit
echo.

REM ¦¡¦¡ [6/6] ÀÚµ¿½ÃÀÛ µî·Ï + ÄÜ¼Ö¾ø´Â ½ÇÇà ÁØºñ ¦¡¦¡
echo [6/6] ¸¶¹«¸®...
copy /Y "%~f0" "%DIR%\eyes-run.bat" >nul 2>nul

REM ÄÜ¼Ö ¾øÀÌ ¿öÄ¿¸¦ ±¸µ¿ÇÏ´Â VBS ·±Ã³ »ý¼º (Ã¢ ¼û±è style=0)
> "%DIR%\eyes-run.vbs" echo Set sh = CreateObject("WScript.Shell")
>>"%DIR%\eyes-run.vbs" echo sh.Run "cmd /c ""%DIR%\eyes-run.bat"" RUN", 0, False

REM ·Î±×¿Â ½Ã ÀÚµ¿½ÃÀÛ = VBS(¼û±è) ½ÇÇà
schtasks /Create /TN "PhantomEyes" /TR "wscript.exe \"%DIR%\eyes-run.vbs\"" /SC ONLOGON /RL HIGHEST /F >nul 2>nul
if not errorlevel 1 (echo      ºÎÆÃ^(·Î±×¿Â^) ½Ã ÀÚµ¿½ÃÀÛ µî·ÏµÊ) else (echo      [°æ°í] ÀÚµ¿½ÃÀÛ µî·Ï ½ÇÆÐ^(¹«½Ã °¡´É^))
echo.
echo ==================================================
echo    ¼³Ä¡ ¿Ï·á!  Eyes ¸¦ ¹é±×¶ó¿îµå·Î ½ÇÇàÇÕ´Ï´Ù ^(ÄÜ¼ÖÃ¢ ¾øÀ½^).
echo    - ÀÛ¾÷ÀÌ ¿À¸é ºê¶ó¿ìÀú¸¸ ÀÚµ¿À¸·Î ¶å´Ï´Ù.
echo    - µ¿ÀÛ È®ÀÎ: °üÁ¦ÆÇ¿¡¼­ ÀÌ Eyes °¡ "ÄÑÁü"À¸·Î ¶ß´ÂÁö º¸¼¼¿ä.
echo    - ·Î±× ÆÄÀÏ: %DIR%\eyes.log
echo    - Á¾·á/»èÁ¦: eyes-uninstall.bat ½ÇÇà
echo ==================================================
start "" wscript.exe "%DIR%\eyes-run.vbs"
echo.
echo    ÀÌ ¼³Ä¡Ã¢Àº 5ÃÊ ÈÄ ´ÝÈü´Ï´Ù...
timeout /t 5 >nul
exit /b

REM ============================================================
REM  ½ÇÇà ¸ðµå (RUN) - ÄÜ¼Ö ¾øÀÌ VBS °¡ ¼û°Ü¼­ È£Ãâ. ·Î±×´Â ÆÄÀÏ·Î.
REM ============================================================
:runmode
cd /d "%DIR%" 2>nul
if not exist "%VPY%" ( exit /b 1 )
> "%DIR%\eyes.log" echo [%date% %time%] Phantom Eyes ½ÇÇà ½ÃÀÛ
:loop
>>"%DIR%\eyes.log" echo [%date% %time%] ÃÖ½Å ÄÚµå È®ÀÎ...
powershell -NoProfile -Command "try{ Invoke-WebRequest -Uri '%SERVER%/download/code.zip' -OutFile '%DIR%\code.zip' -UseBasicParsing -TimeoutSec 60; Expand-Archive -Path '%DIR%\code.zip' -DestinationPath '%DIR%' -Force }catch{}" >>"%DIR%\eyes.log" 2>&1
>>"%DIR%\eyes.log" echo [%date% %time%] Eyes ¿öÄ¿ ±¸µ¿...
"%VPY%" -u "%DIR%\main.py" --worker >>"%DIR%\eyes.log" 2>&1
if "%errorlevel%"=="42" (
  >>"%DIR%\eyes.log" echo [%date% %time%] ¾÷µ¥ÀÌÆ® °¨Áö - Àç½ÃÀÛ
  goto loop
)
>>"%DIR%\eyes.log" echo [%date% %time%] Eyes Á¾·áµÊ
exit /b
