# install.ps1 — ตัวติดตั้ง P2P Remote (ไม่ต้องใช้สิทธิ์ผู้ดูแล ติดตั้งลงโปรไฟล์ผู้ใช้)
# ทำอะไรบ้าง: คัดลอกโปรแกรมลง %LOCALAPPDATA%\P2PRemote → สร้างช็อตคัตเดสก์ท็อป + เมนูเริ่ม → ลงทะเบียนถอนการติดตั้ง
# ไม่ตั้งให้เปิดเองตอนเปิดเครื่อง (ผู้ใช้กดเปิดเองเมื่อต้องการ)
param(
  [string]$AppName = '',          # ว่าง = เดาจากโฟลเดอร์ที่อยู่ข้างๆ
  [switch]$NoShortcut,
  [switch]$Quiet
)
$ErrorActionPreference = 'Stop'
chcp 65001 > $null
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$root = Split-Path -Parent $here

function Say($msg, $color = 'Gray') { if (-not $Quiet) { Write-Host $msg -ForegroundColor $color } }
function Fail($msg) { Write-Host "`n  ✘ $msg`n" -ForegroundColor Red; if (-not $Quiet) { Write-Host 'กด Enter เพื่อปิด...' -NoNewline; [void](Read-Host) }; exit 1 }

Say ''
Say '  ============================================' 'Cyan'
Say '     P2P Remote — ตัวติดตั้ง' 'Cyan'
Say '  ============================================' 'Cyan'
Say ''

# ---------- หาโฟลเดอร์โปรแกรมที่จะติดตั้ง (โฟลเดอร์ที่มี .exe ของ Electron) ----------
$srcDir = $null
if ($AppName -and (Test-Path (Join-Path $root $AppName))) { $srcDir = Join-Path $root $AppName }
else {
  # โฟลเดอร์แอป Electron = มี resources\app.asar (หรือ resources\app ถ้าไม่ได้ทำ asar)
  $cands = Get-ChildItem $root -Directory -ErrorAction SilentlyContinue |
    Where-Object { (Test-Path (Join-Path $_.FullName 'resources\app.asar')) -or (Test-Path (Join-Path $_.FullName 'resources\app')) }
  if ($cands.Count -eq 1) { $srcDir = $cands[0].FullName }
  elseif ($cands.Count -gt 1) {
    Say '  พบโปรแกรมหลายตัว เลือกที่จะติดตั้ง:' 'Yellow'
    for ($i = 0; $i -lt $cands.Count; $i++) { Say ("    [{0}] {1}" -f ($i + 1), $cands[$i].Name) }
    $sel = Read-Host '  พิมพ์หมายเลข'
    $idx = 0; if ([int]::TryParse($sel, [ref]$idx) -and $idx -ge 1 -and $idx -le $cands.Count) { $srcDir = $cands[$idx - 1].FullName }
    else { Fail 'เลือกไม่ถูกต้อง' }
  }
}
if (-not $srcDir) { Fail "ไม่พบโฟลเดอร์โปรแกรมข้างๆ ตัวติดตั้ง`n     (แตกไฟล์ .zip ให้ครบก่อน แล้วค่อยกดติดตั้ง — อย่ารันจากในไฟล์บีบอัด)" }

$exe = Get-ChildItem $srcDir -Filter '*.exe' -File | Where-Object { $_.Name -notmatch 'unins|setup|squirrel' } | Select-Object -First 1
if (-not $exe) { Fail "ไม่พบไฟล์ .exe ใน `"$srcDir`"" }

# ชื่อที่แสดง = ชื่อ .exe (เช่น "P2P Remote Client")
$display = [IO.Path]::GetFileNameWithoutExtension($exe.Name)
$slug = ($display -replace '[^A-Za-z0-9]', '')
$dest = Join-Path $env:LOCALAPPDATA "P2PRemote\$slug"

Say "  โปรแกรม   : $display" 'White'
Say "  ต้นทาง     : $srcDir"
Say "  ติดตั้งไปที่ : $dest"
Say ''

# ---------- ปิดโปรแกรมเดิมถ้ากำลังเปิดอยู่ ----------
$running = Get-Process -Name $exe.BaseName -ErrorAction SilentlyContinue
if ($running) {
  Say '  โปรแกรมกำลังเปิดอยู่ — กำลังปิดก่อนติดตั้ง...' 'Yellow'
  $running | Stop-Process -Force -ErrorAction SilentlyContinue
  Start-Sleep -Milliseconds 900
}

# ---------- คัดลอกไฟล์ ----------
Say '  [1/4] กำลังคัดลอกไฟล์...' 'Yellow'
if (Test-Path $dest) { Remove-Item $dest -Recurse -Force -ErrorAction SilentlyContinue }
New-Item -ItemType Directory -Force -Path $dest | Out-Null
Copy-Item (Join-Path $srcDir '*') $dest -Recurse -Force
$destExe = Join-Path $dest $exe.Name
if (-not (Test-Path $destExe)) { Fail 'คัดลอกไฟล์ไม่สำเร็จ' }

# ---------- ตัวถอนการติดตั้ง ----------
Say '  [2/4] กำลังสร้างตัวถอนการติดตั้ง...' 'Yellow'
$uninst = @"
# uninstall.ps1 — ถอนการติดตั้ง $display
`$ErrorActionPreference = 'SilentlyContinue'
Write-Host ''
Write-Host '  กำลังถอนการติดตั้ง $display ...' -ForegroundColor Yellow
Get-Process -Name '$($exe.BaseName)' | Stop-Process -Force
Start-Sleep -Milliseconds 700
Remove-Item '$(Join-Path ([Environment]::GetFolderPath('Desktop')) "$display.lnk")' -Force
Remove-Item '$(Join-Path ([Environment]::GetFolderPath('Programs')) "P2P Remote\$display.lnk")' -Force
Remove-Item 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$slug' -Recurse -Force
Start-Process powershell -ArgumentList '-NoProfile','-WindowStyle','Hidden','-Command',"Start-Sleep 2; Remove-Item '$dest' -Recurse -Force"
Write-Host '  ถอนการติดตั้งเรียบร้อย' -ForegroundColor Green
Start-Sleep 2
"@
$uninstPath = Join-Path $dest 'uninstall.ps1'
[IO.File]::WriteAllText($uninstPath, $uninst, (New-Object Text.UTF8Encoding $true))

# ---------- ช็อตคัต ----------
if (-not $NoShortcut) {
  Say '  [3/4] กำลังสร้างช็อตคัต...' 'Yellow'
  $sh = New-Object -ComObject WScript.Shell
  $desktop = [Environment]::GetFolderPath('Desktop')
  $lnk = $sh.CreateShortcut((Join-Path $desktop "$display.lnk"))
  $lnk.TargetPath = $destExe; $lnk.WorkingDirectory = $dest
  $lnk.IconLocation = "$destExe,0"; $lnk.Description = 'P2P Remote'
  $lnk.Save()
  $startDir = Join-Path ([Environment]::GetFolderPath('Programs')) 'P2P Remote'
  New-Item -ItemType Directory -Force -Path $startDir | Out-Null
  $lnk2 = $sh.CreateShortcut((Join-Path $startDir "$display.lnk"))
  $lnk2.TargetPath = $destExe; $lnk2.WorkingDirectory = $dest
  $lnk2.IconLocation = "$destExe,0"; $lnk2.Save()
} else { Say '  [3/4] ข้ามการสร้างช็อตคัต' }

# ---------- ลงทะเบียนใน "แอปและฟีเจอร์" ----------
Say '  [4/4] กำลังลงทะเบียนโปรแกรม...' 'Yellow'
$key = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\$slug"
New-Item -Path $key -Force | Out-Null
$size = [math]::Round((Get-ChildItem $dest -Recurse -File | Measure-Object Length -Sum).Sum / 1KB)
Set-ItemProperty $key 'DisplayName'     $display
Set-ItemProperty $key 'DisplayVersion'  '1.0.0'
Set-ItemProperty $key 'Publisher'       'web-th.com'
Set-ItemProperty $key 'InstallLocation' $dest
Set-ItemProperty $key 'DisplayIcon'     $destExe
Set-ItemProperty $key 'EstimatedSize'   $size -Type DWord
Set-ItemProperty $key 'NoModify'        1 -Type DWord
Set-ItemProperty $key 'NoRepair'        1 -Type DWord
Set-ItemProperty $key 'UninstallString' "powershell.exe -NoProfile -ExecutionPolicy Bypass -File `"$uninstPath`""

Say ''
Say '  ============================================' 'Green'
Say '     ✔ ติดตั้งเรียบร้อย' 'Green'
Say '  ============================================' 'Green'
Say ''
Say "  เปิดโปรแกรมได้จาก: ช็อตคัตบนหน้าจอ หรือเมนูเริ่ม" 'White'
Say "  ถอนการติดตั้ง   : ตั้งค่า > แอป > $display" 'Gray'
Say ''

if (-not $Quiet) {
  $go = Read-Host '  เปิดโปรแกรมเลยไหม? (Y/n)'
  if ($go -eq '' -or $go -match '^[YyТ]') { Start-Process $destExe }
}
