# --- SCRIPT DE AUTODESCUBRIMIENTO CON GUI MEJORADA ---

# Cargar librería visual
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 1. AUTODESCUBRIMIENTO
$projectPath = $PSScriptRoot
Write-Host "Ruta: $projectPath"

$b4aFileItem = Get-ChildItem -Path $projectPath -Filter "*.b4a" | Select-Object -First 1

if (-Not $b4aFileItem) {
    [System.Windows.Forms.MessageBox]::Show("No hay archivo .b4a en esta carpeta.", "Error", "OK", "Error")
    return
}

$b4aFile = $b4aFileItem.FullName
$projectName = $b4aFileItem.BaseName
Write-Host "Proyecto: $projectName"

# 2. LIMPIEZA
# $objectsPath = Join-Path $projectPath "Objects"
# if (Test-Path $objectsPath) {
    # Write-Host "Limpiando Objects..."
    # Remove-Item -Path "$objectsPath\*" -Recurse -Force -ErrorAction SilentlyContinue
# }

# 3. LEER VERSIÓN
$versionLine = Get-Content $b4aFile | Select-String "#VersionName:"
if (-Not $versionLine) { Write-Error "Falta #VersionName"; return }
$version = ($versionLine -split ":")[1].Trim()
$tagName = "v$version"

Set-Location $projectPath

# 4. COMMIT
$oldCommit = git rev-parse HEAD

Write-Host "----------------------------------------"
Write-Host "Versión: $version"
Write-Host "Abriendo TortoiseGit..."

# Argumentos limpios
$pathArg = '/path:"{0}"' -f $projectPath
$msgArg = '/logmsg:"VERSION {0}"' -f $version
$cmdArg = "/command:commit"

$process = Start-Process "TortoiseGitProc.exe" -ArgumentList $cmdArg, $pathArg, $msgArg -Wait -PassThru

$newCommit = git rev-parse HEAD

# 5. VALIDACIÓN
if ($oldCommit -eq $newCommit) {
    Write-Warning "Commit cancelado."
	git tag -d $tagName 2>$null  # Borra tag local previo si existe para actualizarlo al nuevo commit
    return
}

Write-Host ">> Commit detectado."

# 6. GESTIÓN DE TAGS (VISUAL TOPMOST)
Write-Host "git ls-remote --tags origin $tagName"
$remoteTagInfo = git ls-remote --tags origin $tagName

if ($remoteTagInfo) {
    # --- TRUCO PARA QUE LA VENTANA SALGA AL FRENTE ---
    # Creamos un formulario invisible que esté "Siempre Visible" (TopMost)
	Write-Host "Recibimos remoteTagInfo"
    $topForm = New-Object System.Windows.Forms.Form
    $topForm.TopMost = $true
    $topForm.Opacity = 0 # Invisible
    $topForm.ShowInTaskbar = $false
    $topForm.StartPosition = "CenterScreen"
    $topForm.Show()
    $topForm.Activate()
    
    [System.Console]::Beep(1000, 200)
    [System.Console]::Beep(1000, 200)
    
    $msgBody = "El tag '$tagName' YA EXISTE en GitHub.`n`nDeseas SOBRESCRIBIRLO?`n`nSi = Borrar anterior y actualizar (Force Push).`nNo = Subir solo codigo (mantener tag viejo)."
    $msgTitle = "⚠️ Conflicto de Versiones - $projectName"
    
    # El mensaje ahora es "hijo" del formulario invisible, heredando su propiedad TopMost
	Write-Host "Preguntamos que hacer con el tag"
    $respuesta = [System.Windows.Forms.MessageBox]::Show($topForm, $msgBody, $msgTitle, "YesNo", "Warning")
    
    $topForm.Dispose() # Limpiamos el formulario invisible
    
    if ($respuesta -eq "Yes") {
        Write-Host "Sobrescribiendo..."
        git tag -d $tagName 2>$null
        git tag -a $tagName -m "Release version $version (Updated)"
        
        git push origin
        git push origin $tagName --force
        Write-Host ">> Tag actualizado (Force Push)."
    } else {
        Write-Host "Conservando tag anterior..."
        git push origin
        Write-Host ">> Código subido."
    }
} else {
    # Tag Nuevo
    git tag -a $tagName -m "Release version $version"
    git push origin --follow-tags
    Write-Host ">> Versión publicada."
}

Write-Host "----------------------------------------"