#!/bin/sh

# ======================================================================
# Archivo:       vstino-flatpak-check
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Diagnóstico del soporte de VSTino para Ardour Flatpak
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

APP=org.ardour.Ardour
FAIL=0

ok()   { printf '  [ OK ] %s\n' "$1"; }
bad()  { printf '  [FALLA] %s\n' "$1"; FAIL=1; }
info() { printf '         %s\n' "$1"; }

echo "== Anfitrión =="
if command -v flatpak >/dev/null 2>&1; then ok "flatpak instalado"; else bad "flatpak no está instalado"; exit 1; fi
if flatpak info "$APP" >/dev/null 2>&1; then
    ok "$APP instalado ($(flatpak info "$APP" 2>/dev/null | sed -n 's/^ *Version: *//p'))"
else
    bad "$APP no está instalado"; exit 1
fi
if command -v wine >/dev/null 2>&1; then ok "wine: $(command -v wine)"; else bad "wine no está en el PATH del anfitrión"; fi
for f in linvst.so lin-vst-server.exe lin-vst-server.exe.so lin-vst-server32.exe lin-vst-server32.exe.so vfp-host-server.sh; do
    [ -e "/opt/vfp/$f" ] && ok "/opt/vfp/$f" || bad "falta /opt/vfp/$f (reinstalá quirinux-vstino)"
done
PERM="$(stat -c %a /opt/vfp/shm 2>/dev/null)"
[ "$PERM" = "1777" ] && ok "/opt/vfp/shm con permisos 1777" || bad "/opt/vfp/shm tiene permisos '$PERM' (debe ser 1777)"

echo "== Permisos Flatpak del usuario =="
OV="$(flatpak override --user --show "$APP" 2>/dev/null)"
echo "$OV" | grep -q 'org.freedesktop.Flatpak=talk' && ok "talk-name org.freedesktop.Flatpak" || bad "falta --talk-name=org.freedesktop.Flatpak"
echo "$OV" | grep -q '/opt/vfp'                      && ok "filesystem /opt/vfp"               || bad "falta --filesystem=/opt/vfp"
echo "$OV" | grep -q '\.vstino'                      && ok "filesystem ~/.vstino"              || bad "falta --filesystem=~/.vstino:ro"
info "Para aplicarlos: flatpak override --user --talk-name=org.freedesktop.Flatpak --filesystem=/opt/vfp --filesystem=~/.vstino:ro $APP"

echo "== Dentro del sandbox de $APP =="
TOKEN="chk-$$"
OUT="$(flatpak run --command=sh "$APP" -c "
    echo \"sandbox: /opt/vfp -> \$(ls /opt/vfp 2>&1 | tr '\n' ' ')\"
    echo \"sandbox: flatpak-spawn -> \$(command -v flatpak-spawn || echo NO)\"
    echo \"sandbox: scanner -> \$(ls /app/lib/ardour*/ardour-vst-scanner 2>/dev/null | tail -n 1 || true)\"
    echo test > /opt/vfp/shm/$TOKEN 2>&1 && echo 'sandbox: escritura en /opt/vfp/shm OK' || echo 'sandbox: NO puede escribir en /opt/vfp/shm'
    flatpak-spawn --host sh -c 'test -f /opt/vfp/shm/$TOKEN && echo \"anfitrión: ve el archivo del sandbox (memoria compartida OK)\" || echo \"anfitrión: NO ve el archivo del sandbox\"; command -v wine || echo \"anfitrión: wine NO encontrado\"' 2>&1
" 2>&1)"
echo "$OUT" | sed 's/^/         /'
rm -f "/opt/vfp/shm/$TOKEN" 2>/dev/null

echo "$OUT" | grep -q 'memoria compartida OK' || FAIL=1
echo
if [ "$FAIL" = 0 ]; then echo "Todo en orden."; else echo "Hay fallas: revisá las líneas [FALLA] y la salida de arriba."; fi
echo "Registro de VSTino: ~/.vstino/vstino.log"
exit "$FAIL"
