# =============================================================================
# Installer.ps1 — installation (ou mise a jour) d'un widget Tojii.
#
# Ce que fait ce script, dans l'ordre :
#   1. ferme la version qui tourne, s'il y en a une ;
#   2. installe l'executable dans %LOCALAPPDATA%\Programs\<Nom>\ ;
#   3. cree le raccourci du menu Demarrer, et celui du demarrage automatique ;
#   4. lance l'application.
#
# L'ANCIENNE VERSION EST REMPLACEE, pas dupliquee : c'est le meme dossier et le
# meme nom de fichier d'une version a l'autre. Les reglages, eux, vivent dans
# %APPDATA% et ne sont jamais touches.
#
# Ensuite, l'application se met a jour toute seule : elle verifie au demarrage
# puis toutes les heures, et propose la nouvelle version quand il y en a une.
#
#   clic droit -> Executer avec PowerShell     (ou : Installer.cmd)
# =============================================================================
param(
  [string]$Exe = "",
  [string]$Name = "Claude Usage",
  [switch]$NoAutoStart
)

$ErrorActionPreference = 'Stop'

function Info($m) { Write-Host "  $m" }

try {
  $here = Split-Path -Parent $MyInvocation.MyCommand.Path
  if (-not $Exe) {
    $found = Get-ChildItem -LiteralPath $here -Filter *.exe -File | Where-Object { $_.Name -ne 'Installer.exe' } | Select-Object -First 1
    if (-not $found) { throw "aucun executable trouve a cote du script" }
    $Exe = $found.FullName
  }

  Write-Host ""
  Write-Host "  Installation de $Name" -ForegroundColor Cyan
  Write-Host "  ---------------------------------------------"

  $processName = [IO.Path]::GetFileNameWithoutExtension($Exe)
  $running = Get-Process -Name $processName -ErrorAction SilentlyContinue
  if ($running) {
    Info "fermeture de la version en cours..."
    $running | Stop-Process -Force
    Start-Sleep -Seconds 2
  }

  $target = Join-Path $env:LOCALAPPDATA "Programs\$Name"
  New-Item -ItemType Directory -Path $target -Force | Out-Null
  $installed = Join-Path $target ([IO.Path]::GetFileName($Exe))

  # Copie, avec une tentative de reprise : juste apres l'arret, Windows garde
  # parfois le fichier ouvert une seconde ou deux.
  $deadline = (Get-Date).AddSeconds(15)
  while ($true) {
    try { Copy-Item -LiteralPath $Exe -Destination $installed -Force; break }
    catch { if ((Get-Date) -gt $deadline) { throw } ; Start-Sleep -Milliseconds 500 }
  }
  Info "installe dans $target"

  $shell = New-Object -ComObject WScript.Shell
  $startMenu = Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs\$Name.lnk"
  $lnk = $shell.CreateShortcut($startMenu)
  $lnk.TargetPath = $installed
  $lnk.WorkingDirectory = $target
  $lnk.Description = "$Name — widget Tojii"
  $lnk.Save()
  Info "raccourci ajoute au menu Demarrer"

  if (-not $NoAutoStart) {
    $startup = Join-Path $env:APPDATA "Microsoft\Windows\Start Menu\Programs\Startup\$Name.lnk"
    $auto = $shell.CreateShortcut($startup)
    $auto.TargetPath = $installed
    $auto.WorkingDirectory = $target
    $auto.Save()
    Info "lancement au demarrage de Windows active"
  }

  Start-Process -FilePath $installed
  Write-Host ""
  Write-Host "  Termine. $Name est lance." -ForegroundColor Green
  Write-Host "  Les mises a jour suivantes arriveront toutes seules." -ForegroundColor Green
  Write-Host ""
}
catch {
  Write-Host ""
  Write-Host "  Echec : $($_.Exception.Message)" -ForegroundColor Red
  Write-Host ""
  exit 1
}
