# --- SCRIPT DE COMMIT Y TAG (MODO IDE B4A) ---

# 0. CONFIGURACIÓN
$HacerPush = $true # Cambia a $true para que suba los cambios a GitHub

# Cargar librería visual para el MessageBox (por si se necesita en el Push)
Add-Type -AssemblyName System.Windows.Forms

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

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

if (-Not $b4aFileItem) {
    Write-Host "ERROR: No hay archivo .b4a en esta carpeta."
    return
}

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

# 2. LEER VERSIÓN
$versionLine = Get-Content $b4aFileItem.FullName | Select-String "#VersionName:"
if (-Not $versionLine) { 
    Write-Host "ERROR: Falta #VersionName en el archivo .b4a"
    return 
}
$version = ($versionLine -split ":")[1].Trim()
# Reemplaza cualquier espacio en blanco por un guion bajo solo para el tag
$tagName = "$version".Replace(" ", "_")

Set-Location $projectPath

# 3. COMMIT CON TORTOISEGIT
$oldCommit = git rev-parse HEAD 2>$null

Write-Host "----------------------------------------"
Write-Host "Version a etiquetar: $version"
Write-Host "Abriendo ventana de TortoiseGit..."

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

Start-Process "TortoiseGitProc.exe" -ArgumentList $cmdArg, $pathArg, $msgArg

Write-Host "Esperando a que termines el commit en TortoiseGit..."
# El freno de mano: espera a que cierres la ventana
while (Get-Process "TortoiseGitProc" -ErrorAction SilentlyContinue) {
    Start-Sleep -Seconds 1
}

$newCommit = git rev-parse HEAD 2>$null

# 4. VALIDACIÓN
if ($oldCommit -eq $newCommit) {
    Write-Host "WARNING: Commit cancelado o sin cambios detectados."
    return
}

Write-Host "Commit registrado exitosamente: $newCommit"

# 5. GESTIÓN DE TAGS
$tagGenerado = $false

# Revisamos si el tag ya existe localmente y lo borramos para recrearlo con el nuevo commit
if (git tag -l $tagName) {
    git tag -d $tagName 2>$null | Out-Null
}

# Creamos el tag nuevo apuntando al commit que acabamos de hacer
git tag -a $tagName -m "Release version $version"
if ($?) { $tagGenerado = $true }

# 6. LÓGICA DE PUSH
if ($HacerPush) {
    Write-Host "Conectando con GitHub..."
    $remoteTagInfo = git ls-remote --tags origin $tagName

    if ($remoteTagInfo) {
        # Conflicto: Ya existe en remoto
        $topForm = New-Object System.Windows.Forms.Form
        $topForm.TopMost = $true
        $topForm.Opacity = 0
        $topForm.ShowInTaskbar = $false
        $topForm.StartPosition = "CenterScreen"
        $topForm.Show()
        $topForm.Activate()
        
        [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"
        
        $respuesta = [System.Windows.Forms.MessageBox]::Show($topForm, $msgBody, $msgTitle, "YesNo", "Warning")
        $topForm.Dispose()
        
        if ($respuesta -eq "Yes") {
            Write-Host "Sobrescribiendo tag en GitHub (Force Push)..."
            git push origin
            git push origin $tagName --force
        } else {
            Write-Host "Conservando tag anterior en GitHub..."
            git push origin
        }
    } else {
        # Tag Nuevo
        Write-Host "Subiendo codigo y tag nuevo a GitHub..."
        git push origin --follow-tags
    }
} else {
    Write-Host "Push OMITIDO (Switch de control apagado)."
}

# 7. REPORTE FINAL PARA EL IDE
$EstadoPush = if($HacerPush) { "SI" } else { "NO (Modo de prueba local)" }
$EstadoTag = if($tagGenerado) { "SI ($tagName)" } else { "NO (Error al generar)" }

Write-Host ""
Write-Host "========================================"
Write-Host "           REPORTE DE VERSION           "
Write-Host "========================================"
Write-Host " PROYECTO   : $projectName"
Write-Host " TAG CREADO : $EstadoTag"
Write-Host " PUSH GITHUB: $EstadoPush"
Write-Host "========================================"