# PowerShell Installer for Antigravity Desktop Agent
$ErrorActionPreference = "Stop"

# Configurações de caminhos
$InstallDir = "$env:LOCALAPPDATA\AntigravityAgent"
$SourceDir = $PSScriptRoot
$StartupPath = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
$ShortcutPath = "$StartupPath\AntigravityAgent.lnk"

Write-Host "=============================================" -ForegroundColor Cyan
Write-Host "   Instalador do Antigravity Desktop Agent   " -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""

# 1. Parar agente se já estiver em execução
Write-Host "[1/5] Verificando e finalizando processos antigos do agente..." -ForegroundColor Yellow
$oldProcesses = Get-CimInstance Win32_Process -Filter "name like 'python%.exe'" | Where-Object { $_.CommandLine -like "*agent.py*" -or $_.CommandLine -like "*agent_watchdog.py*" }
if ($oldProcesses) {
    foreach ($proc in $oldProcesses) {
        Write-Host "Finalizando processo ID $($proc.ProcessId)..." -ForegroundColor DarkYellow
        Stop-Process -Id $proc.ProcessId -Force -ErrorAction SilentlyContinue
    }
    # Pequena pausa para garantir a liberação dos arquivos
    Start-Sleep -Seconds 1
} else {
    Write-Host "Nenhum processo em execução encontrado." -ForegroundColor Gray
}

# 2. Copiar arquivos para a pasta de instalação
Write-Host "[2/5] Copiando arquivos para $InstallDir..." -ForegroundColor Yellow
if (!(Test-Path $InstallDir)) {
    New-Item -ItemType Directory -Path $InstallDir | Out-Null
}

# Lista de arquivos/pastas para copiar, excluindo arquivos desnecessários como logs ou instaladores
$FilesToCopy = Get-ChildItem -Path $SourceDir -Exclude "*.log", "install.ps1", "uninstall.ps1"
foreach ($file in $FilesToCopy) {
    $dest = Join-Path $InstallDir $file.Name
    Write-Host "  Copiando $($file.Name)..." -ForegroundColor Gray
    Copy-Item -Path $file.FullName -Destination $dest -Recurse -Force
}

# Copiar os scripts PS de install/uninstall também para caso o usuário queira rodar a desinstalação depois
Copy-Item -Path (Join-Path $SourceDir "uninstall.ps1") -Destination (Join-Path $InstallDir "uninstall.ps1") -Force | Out-Null

# 3. Verificar o Python
Write-Host "[3/5] Verificando instalação do Python..." -ForegroundColor Yellow
$pythonPath = Get-Command pythonw.exe -ErrorAction SilentlyContinue
if (-not $pythonPath) {
    Write-Error "ERRO: O executável 'pythonw.exe' não foi encontrado no seu PATH do Windows.`nPor favor, instale o Python e marque a opção 'Add Python to PATH' no instalador."
    exit 1
}
Write-Host "Python encontrado: $($pythonPath.Source)" -ForegroundColor Green

# 4. Instalar dependências
Write-Host "[4/5] Instalando dependências do Python..." -ForegroundColor Yellow
try {
    # Garante que pip está atualizado
    Write-Host "Atualizando pip..." -ForegroundColor Gray
    Start-Process -FilePath "python.exe" -ArgumentList "-m pip install --upgrade pip" -NoNewWindow -Wait
    
    # Instala dependências do requirements.txt
    Write-Host "Instalando pacotes necessários..." -ForegroundColor Gray
    $requirementsPath = Join-Path $InstallDir "requirements.txt"
    Start-Process -FilePath "python.exe" -ArgumentList "-m pip install -r `"$requirementsPath`"" -NoNewWindow -Wait
    Write-Host "Dependências instaladas com sucesso!" -ForegroundColor Green
}
catch {
    Write-Warning "Houve uma falha ao instalar as dependências via pip. Verifique sua conexão com a internet."
    Write-Warning $_.Exception.Message
}

# 5. Criar atalhos no Startup do Windows (Pasta Inicializar)
Write-Host "[5/5] Configurando inicialização com o Windows..." -ForegroundColor Yellow
try {
    $WshShell = New-Object -ComObject WScript.Shell
    
    # Atalho do agente principal
    $Shortcut = $WshShell.CreateShortcut($ShortcutPath)
    $Shortcut.TargetPath = "pythonw.exe"
    $Shortcut.Arguments = "`"$InstallDir\agent.py`""
    $Shortcut.WorkingDirectory = $InstallDir
    $Shortcut.Description = "Antigravity Desktop Agent"
    $Shortcut.Save()
    Write-Host "Atalho de inicialização criado em: $ShortcutPath" -ForegroundColor Green

    # Atalho do watchdog secundário
    $WatchdogShortcutPath = "$StartupPath\AntigravityWatchdog.lnk"
    $WatchdogShortcut = $WshShell.CreateShortcut($WatchdogShortcutPath)
    $WatchdogShortcut.TargetPath = "pythonw.exe"
    $WatchdogShortcut.Arguments = "`"$InstallDir\agent_watchdog.py`""
    $WatchdogShortcut.WorkingDirectory = $InstallDir
    $WatchdogShortcut.Description = "Antigravity Watchdog Agent"
    $WatchdogShortcut.Save()
    Write-Host "Atalho do watchdog de inicialização criado em: $WatchdogShortcutPath" -ForegroundColor Green
}
catch {
    Write-Error "Falha ao criar os atalhos de inicialização: $($_.Exception.Message)"
    exit 1
}

# 6. Iniciar o agente e o watchdog
Write-Host ""
Write-Host "Instalação concluída com sucesso!" -ForegroundColor Green
Write-Host "Iniciando o Antigravity Agent e o Watchdog em segundo plano..." -ForegroundColor Cyan
$pythonwExe = $pythonPath.Source
Start-Process -FilePath "$pythonwExe" -ArgumentList "`"$InstallDir\agent.py`"" -WorkingDirectory $InstallDir -NoNewWindow
Start-Process -FilePath "$pythonwExe" -ArgumentList "`"$InstallDir\agent_watchdog.py`"" -WorkingDirectory $InstallDir -NoNewWindow
Write-Host "O agente está ativo no System Tray (ícone de Disco Voador vermelho/verde) e o Watchdog está rodando." -ForegroundColor Cyan
Write-Host ""
