#!/bin/bash
# Cliente macOS: arregla el LaunchAgent plist para Macs ya instaladas con formato viejo.
# Correr en la Mac objetivo con sudo. Idempotente.
set -euo pipefail

SERVICENAME="${1:-ZH_Consultores_Remote_Agent}"
COMPANY_NAME_DEFAULT="ZH Consultores"
INSTALL_PARENT="/usr/local/mesh_services"

if [ -d "$INSTALL_PARENT/$COMPANY_NAME_DEFAULT/$SERVICENAME" ]; then
  COMPANY="$COMPANY_NAME_DEFAULT"
else
  COMPANY="$(ls "$INSTALL_PARENT" 2>/dev/null | while read d; do
    [ -d "$INSTALL_PARENT/$d/$SERVICENAME" ] && echo "$d" && break
  done)"
fi
[ -n "$COMPANY" ] || { echo "ERROR: no encontre $SERVICENAME en $INSTALL_PARENT/*/"; exit 1; }

INSTALL_DIR="$INSTALL_PARENT/$COMPANY/$SERVICENAME"
BIN="$(ls "$INSTALL_DIR"/*Agent 2>/dev/null | head -1)"
[ -x "$BIN" ] || { echo "ERROR: no encontre binario en $INSTALL_DIR"; exit 1; }

LA_PLIST="/Library/LaunchAgents/${SERVICENAME}.plist"
LD_PLIST="/Library/LaunchDaemons/${SERVICENAME}.plist"

echo "==> COMPANY = $COMPANY"
echo "==> BIN     = $BIN"

[ -w /Library/LaunchAgents ] || { echo "ERROR: corre con sudo"; exit 1; }

TS=$(date +%Y%m%d_%H%M%S)
[ -f "$LA_PLIST" ] && cp "$LA_PLIST" "${LA_PLIST}.bak.$TS"

cat > "$LA_PLIST" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>${SERVICENAME}-launchagent</string>
    <key>ProgramArguments</key>
    <array>
      <string>${BIN}</string>
      <string>-kvmagent</string>
    </array>
    <key>LimitLoadToSessionType</key>
    <array>
      <string>Aqua</string>
      <string>LoginWindow</string>
    </array>
    <key>WorkingDirectory</key>
    <string>${INSTALL_DIR}/</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>ThrottleInterval</key>
    <integer>5</integer>
  </dict>
</plist>
PLIST
chown root:wheel "$LA_PLIST"
chmod 644 "$LA_PLIST"
echo "OK: $LA_PLIST escrito"

CUID="$(stat -f %u /dev/console)"
CUSER="$(stat -f %Su /dev/console)"
echo "==> Console UID=$CUID USER=$CUSER"

launchctl bootout "gui/$CUID/${SERVICENAME}-launchagent" 2>&1 || true
launchctl bootstrap "gui/$CUID" "$LA_PLIST"
if [ -f "$LD_PLIST" ]; then
  launchctl bootout "system/$SERVICENAME" 2>&1 || true
  sleep 3
  for i in 1 2 3; do
    launchctl bootstrap system "$LD_PLIST" 2>&1 && break
    sleep 3
  done
fi
sleep 4
echo "--- Procesos ---"
ps aux | grep "$SERVICENAME" | grep -v grep || echo "(ninguno)"
echo "--- Socket ---"
ls -la /tmp/meshagent-kvm-*.sock 2>&1 || echo "(sin socket todavia)"
echo "OK: cliente parchado. Tras la primera reconexion macOS pedira aprobar TCC una vez."
