@echo off
chcp 65001>nul 2>&1
powershell -NoProfile -ExecutionPolicy Bypass -Command "$s='%~f0';$t=[IO.File]::ReadAllText($s,[Text.Encoding]::UTF8);$k=[char]35+'KRPSBODY';iex $t.Substring($t.IndexOf($k)+$k.Length)"
echo.
pause
exit /b
#KRPSBODY
# ============================================================================
#  EllesmereUI_koKR 설치기 (한글화 애드온 본체) — 더블클릭 실행
#   1) WoW Interface\AddOns 폴더 자동 탐지
#   2) 이 폴더(EllesmereUI_koKR)를 AddOns 로 복사
#   3) EllesmereUI 의 Expressway.TTF 를 한글 폰트로 교체 (Wanted Sans 다운로드, ㅁ 방지, 원본 백업)
#  ※ 한글/영문 윈도우 자동 구분 출력. 폰트 교체는 WoW 종료 상태에서만.
# ============================================================================
$ErrorActionPreference = 'Stop'
$Root = Split-Path -Parent $s
$KO = ((Get-UICulture).Name -like 'ko*') -or ((Get-Culture).Name -like 'ko*')
function M($en, $ko) { if ($KO) { $ko } else { $en } }
function Say($en, $ko, $c) { Write-Host (M $en $ko) -ForegroundColor $c }

Write-Host ''
Say '==  EllesmereUI_koKR  installer  ==' '==  EllesmereUI_koKR  설치  ==' Cyan
Write-Host ''

# ---- WoW Interface\AddOns\EllesmereUI 탐지 ----
function Test-EUI($d) { return ($d -and (Test-Path (Join-Path $d 'EllesmereUI.toc'))) }
function FromWoWBase($wow) {
  if (-not $wow) { return $null }
  foreach ($fl in @('_retail_', '_classic_', '_classic_era_', '_ptr_', '_xptr_', '_beta_')) {
    $c = Join-Path $wow "$fl\Interface\AddOns\EllesmereUI"
    if (Test-EUI $c) { return [IO.Path]::GetFullPath($c) }
  }
  return $null
}
function Resolve-EUI {
  # 1) 실행 중인 WoW 프로세스 경로
  try {
    foreach ($pn in 'Wow', 'WowClassic', 'WowT', 'WowB') {
      $p = Get-Process -Name $pn -ErrorAction SilentlyContinue | Select-Object -First 1
      if ($p -and $p.Path) {
        $fd = Split-Path $p.Path -Parent
        $r = FromWoWBase (Split-Path $fd -Parent); if ($r) { return $r }
        $r = Join-Path $fd 'Interface\AddOns\EllesmereUI'; if (Test-EUI $r) { return [IO.Path]::GetFullPath($r) }
      }
    }
  } catch {}
  # 2) 레지스트리(Blizzard 설치 경로)
  try {
    foreach ($k in 'HKLM:\SOFTWARE\WOW6432Node\Blizzard Entertainment\World of Warcraft', 'HKLM:\SOFTWARE\Blizzard Entertainment\World of Warcraft', 'HKCU:\SOFTWARE\Blizzard Entertainment\World of Warcraft') {
      $ip = (Get-ItemProperty -Path $k -ErrorAction SilentlyContinue).InstallPath
      if ($ip) {
        $r = Join-Path $ip 'Interface\AddOns\EllesmereUI'; if (Test-EUI $r) { return [IO.Path]::GetFullPath($r) }
        $r = FromWoWBase (Split-Path $ip -Parent); if ($r) { return $r }
      }
    }
  } catch {}
  # 3) 흔한 설치 위치
  $roots = @($env:ProgramFiles, ${env:ProgramFiles(x86)}, 'C:\Program Files (x86)', 'C:\Program Files', 'C:\Games', 'D:\Games')
  foreach ($dv in ([IO.DriveInfo]::GetDrives() | Where-Object { $_.IsReady -and $_.DriveType -eq 'Fixed' })) {
    $roots += $dv.RootDirectory.FullName; $roots += (Join-Path $dv.RootDirectory.FullName 'Games')
  }
  foreach ($rt in ($roots | Select-Object -Unique)) { if ($rt) { $r = FromWoWBase (Join-Path $rt 'World of Warcraft'); if ($r) { return $r } } }
  # 4) 이 설치기가 이미 AddOns 안에 풀린 경우 — 상위로 올라가며 탐색
  $d = $Root
  for ($i = 0; $i -lt 8 -and $d; $i++) {
    if (Test-EUI (Join-Path $d 'EllesmereUI')) { return [IO.Path]::GetFullPath((Join-Path $d 'EllesmereUI')) }
    $d = Split-Path $d -Parent
  }
  return $null
}

$eui = Resolve-EUI
if (-not $eui) {
  Say 'EllesmereUI not found. Install EllesmereUI first, then re-run.' 'EllesmereUI 를 찾지 못했습니다. EllesmereUI 를 먼저 설치한 뒤 다시 실행하세요.' Red
  return
}
$addons = Split-Path $eui -Parent
Write-Host ("  EllesmereUI : " + $eui) -ForegroundColor DarkGray
Write-Host ("  AddOns      : " + $addons) -ForegroundColor DarkGray
Write-Host ''

# ---- 권한: 대상 폴더에 쓸 수 없고 관리자도 아니면 → 관리자로 자동 재실행(UAC). 쓸 수 있으면 그냥 진행 ----
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
$canWrite = $false
try { $tf = Join-Path $addons ('.wtest_' + [IO.Path]::GetRandomFileName()); Set-Content -LiteralPath $tf -Value 'x' -ErrorAction Stop; Remove-Item -LiteralPath $tf -Force; $canWrite = $true } catch {}
if (-not $canWrite -and -not $isAdmin) {
  Say 'This game folder needs admin rights. A Windows prompt appears - click Yes.' '게임 폴더에 쓰려면 관리자 권한이 필요합니다. 잠시 후 뜨는 [예]를 누르세요.' Yellow
  try { Start-Process -FilePath $env:ComSpec -ArgumentList '/c', ('"' + $s + '"') -Verb RunAs | Out-Null }
  catch { Say 'Cancelled - right-click this file and pick "Run as administrator".' '취소됨 - 이 파일을 우클릭하고 "관리자 권한으로 실행"을 선택하세요.' Red }
  return
}

# ---- EllesmereUI_koKR 를 AddOns 로 복사 — 폴더가 있어도 강제 덮어쓰기 (기존 삭제 후 새로 복사) ----
$dest = Join-Path $addons 'EllesmereUI_koKR'
$srcFull = [IO.Path]::GetFullPath($Root).TrimEnd('\')
$dstFull = [IO.Path]::GetFullPath($dest).TrimEnd('\')
if ($srcFull -ieq $dstFull) {
  Say 'Already running from the AddOns folder (no copy needed).' 'AddOns 폴더에서 실행 중 (복사 불필요).' Yellow
} else {
  try {
    if (Test-Path $dest) { Remove-Item $dest -Recurse -Force -ErrorAction SilentlyContinue }   # 기존 폴더 강제 제거(잠긴 파일 무시)
    Copy-Item $Root $dest -Recurse -Force                                                        # 강제 덮어쓰기 복사
    Get-ChildItem $dest -Filter *.bat -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue
    Say ('Copied  ->  ' + $dest) ('복사 완료  ->  ' + $dest) Green
  } catch {
    Say 'Copy failed - close WoW completely and run this installer again.' '복사 실패 - WoW를 완전히 종료한 뒤 이 설치기를 다시 실행하세요.' Red
    return
  }
}

# ---- 폰트 교체: EllesmereUI\media\fonts\Expressway.TTF <- 한글 폰트 ----
#  WoW 실행 중이어도 강제 복사 시도. 파일이 잠겨 실패하면 "게임 종료 후 다시 실행" 안내.
$fontDir = Join-Path $eui 'media\fonts'
$expr = Join-Path $fontDir 'Expressway.TTF'
if (-not (Test-Path $fontDir)) {
  Say '[FONT] EUI font folder not found - font step skipped.' '[FONT] EUI 폰트 폴더를 못 찾음 - 폰트 단계 건너뜀.' Yellow
} else {
  if ((Test-Path $expr) -and -not (Test-Path "$expr.orig")) { try { Copy-Item $expr "$expr.orig" -Force } catch {} }   # 원본 1회 백업
  try { Get-ChildItem $fontDir -Filter 'Expressway.TTF.old_*' -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue } catch {}   # 이전 실행에서 잠겨 옆으로 치워둔 잔재 정리(게임 종료 후 삭제됨)
  # 업데이트 재실행: 이미 *Bold*(정확 용량)가 깔렸으면 다운로드 건너뜀.
  #   Wanted Sans v1.0.3: Bold=2,344,596B / SemiBold=2,352,124B (7.5KB 차이) → 용량 정확 일치로 판별.
  #   지금 SemiBold가 깔려 있으면 용량이 안 맞아 자동으로 Bold를 다시 받음(자가 치유).
  $BOLD_BYTES = 2344596
  if ((Test-Path $expr) -and ((Get-Item $expr).Length -eq $BOLD_BYTES)) {
    Say '[FONT] Wanted Sans Bold already installed (size match) - skipping download.' '[FONT] Wanted Sans Bold 이미 설치됨(용량 일치) - 다운로드 건너뜀.' DarkGray
  } else {
    # 폰트 소스: Wanted Sans Bold 다운로드 → 실패 시 로컬 Malgun
    $srcTtf = $null
    $tmp = Join-Path ([IO.Path]::GetTempPath()) 'wanted_ttf.zip'; $exd = Join-Path ([IO.Path]::GetTempPath()) 'wanted_ttf_ex'
    try {
      Say '[FONT] downloading Wanted Sans Bold (OFL, ~21MB)...' '[FONT] Wanted Sans Bold 내려받는 중 (OFL, 약 21MB)...' Cyan
      if (Test-Path $exd) { Remove-Item $exd -Recurse -Force }
      Invoke-WebRequest -Uri 'https://github.com/wanteddev/wanted-sans/releases/download/v1.0.3/WantedSans-1.0.3.zip' -OutFile $tmp -UseBasicParsing
      Expand-Archive -Path $tmp -DestinationPath $exd -Force
      $f = Get-ChildItem $exd -Recurse -Filter 'WantedSans-Bold.ttf' | Select-Object -First 1
      if ($f) { $srcTtf = $f.FullName }
    } catch { Say '[FONT] download failed - using local Korean font.' '[FONT] 내려받기 실패 - 로컬 한글 폰트 사용.' Yellow }
    if (-not $srcTtf) { foreach ($cand in (Join-Path $env:WINDIR 'Fonts\malgunbd.ttf'), (Join-Path $env:WINDIR 'Fonts\malgun.ttf'), (Join-Path $env:WINDIR 'Fonts\gulim.ttc')) { if (Test-Path $cand) { $srcTtf = $cand; break } } }
    if ($srcTtf) {
      # 강제 복사: WoW 실행 중이어도 시도. ① 직접 덮어쓰기 → ② 잠겨 실패하면 기존을
      #   옆으로 치우고(rename) 새로 쓰기. (이미 떠 있는 화면은 시작 때 폰트를 읽으므로
      #   새 폰트는 게임을 재시작해야 보인다 — 복사 자체는 실행 중에도 된다.)
      $done = $false
      try { Copy-Item $srcTtf $expr -Force -ErrorAction Stop; $done = $true } catch {
        try {
          $old = "$expr.old_" + [IO.Path]::GetRandomFileName()
          Rename-Item -LiteralPath $expr -NewName (Split-Path $old -Leaf) -Force -ErrorAction Stop
          Copy-Item $srcTtf $expr -Force -ErrorAction Stop; $done = $true
          try { Remove-Item -LiteralPath $old -Force -ErrorAction SilentlyContinue } catch {}
        } catch {}
      }
      if ($done) {
        if ((Split-Path $srcTtf -Leaf) -like 'Wanted*') { try { Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/wanteddev/wanted-sans/main/OFL.txt' -OutFile (Join-Path $fontDir 'WantedSans-OFL.txt') -UseBasicParsing } catch {} }
        $instKB = [int]((Get-Item $expr).Length/1KB)
        Say ('[FONT] installed ' + (Split-Path $srcTtf -Leaf) + ' -> Expressway.TTF (' + $instKB + 'KB)  (shows after you restart WoW)') ('[FONT] ' + (Split-Path $srcTtf -Leaf) + ' -> Expressway.TTF (' + $instKB + 'KB) 설치 완료  (게임을 재시작하면 보입니다)') Green
      } else {
        Say '[FONT] could not replace right now - it will apply next time you restart WoW (or just re-run this).' '[FONT] 지금은 교체하지 못함 - 다음에 게임을 재시작하면 적용됩니다(또는 그냥 다시 실행).' Yellow
      }
    } else {
      Say '[FONT] no Korean font available - skipped.' '[FONT] 사용할 한글 폰트 없음 - 건너뜀.' Yellow
    }
    Remove-Item $tmp, $exd -Recurse -Force -ErrorAction SilentlyContinue
  }
}

Write-Host ''
Say 'DONE. In-game: enable "EllesmereUI_koKR" in the AddOns list, then /reload.' '완료. 게임에서 애드온 목록의 "EllesmereUI_koKR" 를 켜고 /reload 하세요.' Cyan
