#!/usr/bin/bash
# Helper privilegiado del webphone (root). Salida: JSON en stdout. Exit 0/1.
set -u

PKG="issabel-webphone"
ACCION="${1:-}"

if command -v dnf >/dev/null 2>&1; then PM="dnf"; else PM="yum"; fi

json_escape() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; }

case "$ACCION" in
    check_update)
        INSTALLED=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" "$PKG" 2>/dev/null)
        if [ -z "$INSTALLED" ]; then
            echo '{"installed":null,"available":null,"update_available":false}'
            exit 0
        fi
        SALIDA=$($PM --color=never check-update "$PKG" 2>&1)
        RC=$?
        AVAILABLE=$(printf '%s\n' "$SALIDA" | awk '$1 ~ /^issabel-webphone/ {print $2}' | tail -1)
        if [ "$RC" -eq 100 ] && [ -n "$AVAILABLE" ]; then
            echo "{\"installed\":\"$(json_escape "$INSTALLED")\",\"available\":\"$(json_escape "$AVAILABLE")\",\"update_available\":true}"
        elif [ "$RC" -eq 0 ] || { [ "$RC" -eq 100 ] && [ -z "$AVAILABLE" ]; }; then
            echo "{\"installed\":\"$(json_escape "$INSTALLED")\",\"available\":\"$(json_escape "$INSTALLED")\",\"update_available\":false}"
        else
            echo '{"error":"No se pudo consultar el repositorio de paquetes"}'
            exit 1
        fi
        ;;
    update)
        SALIDA=$($PM --color=never update -y "$PKG" 2>&1)
        RC=$?
        if [ "$RC" -ne 0 ]; then
            ULTIMAS=$(printf '%s\n' "$SALIDA" | tail -3 | tr '\n' ' ')
            echo "{\"success\":false,\"error\":\"$(json_escape "$ULTIMAS")\"}"
            exit 1
        fi
        NEW_VERSION=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" "$PKG" 2>/dev/null)
        echo "{\"success\":true,\"new_version\":\"$(json_escape "$NEW_VERSION")\"}"
        ;;
    info)
        if ! rpm -q "$PKG" >/dev/null 2>&1; then
            echo '{"error":"Paquete no instalado"}'
            exit 1
        fi
        V=$(rpm -q --queryformat "%{VERSION}" "$PKG" 2>/dev/null)
        R=$(rpm -q --queryformat "%{RELEASE}" "$PKG" 2>/dev/null)
        VENDOR=$(rpm -q --queryformat "%{VENDOR}" "$PKG" 2>/dev/null)
        echo "{\"version\":\"$(json_escape "$V")\",\"release\":\"$(json_escape "$R")\",\"vendor\":\"$(json_escape "$VENDOR")\"}"
        ;;
    *)
        echo '{"error":"Acción no válida: use check_update, update o info"}'
        exit 1
        ;;
esac
