#!/bin/bash
# Installe sur le Mac mini l'ouverture AUTOMATIQUE et PERMANENTE du partage
# d'écran vers le bureau Linux du serveur (77.42.67.118).
# À lancer UNE SEULE FOIS sur le mini, dans le Terminal :
#   curl -fsSL http://77.42.67.118:6080/install-partage.sh | bash
set -euo pipefail
SERVEUR=77.42.67.118

mkdir -p "$HOME/.sheriff" "$HOME/Library/LaunchAgents"

# 1) Le veilleur : rouvre la fenetre si fermée OU si la connexion est morte
cat > "$HOME/.sheriff/partage-serveur.sh" <<EOF
#!/bin/bash
# Partage d'ecran vers le bureau Linux du serveur : toujours ouvert, toujours vivant.
SERVEUR=$SERVEUR

fermer_et_rouvrir() {
  pkill -x "Screen Sharing" 2>/dev/null || true
  sleep 1
  open "vnc://\$SERVEUR"
}

if ! pgrep -x "Screen Sharing" >/dev/null 2>&1; then
  # Fenetre absente (fermee ou jamais ouverte) -> ouvrir
  open "vnc://\$SERVEUR"
else
  # Fenetre presente mais connexion etablie ? (l'etat zombie « reconnexion »)
  if ! lsof -nP -i TCP:"5900" -s TCP:ESTABLISHED 2>/dev/null | grep -q "\$SERVEUR"; then
    fermer_et_rouvrir
  fi
fi

# Empeche l'ecran/le Mac de dormir (secteur uniquement)
pgrep -x caffeinate >/dev/null 2>&1 || nohup /usr/bin/caffeinate -dis >/dev/null 2>&1 &
EOF
chmod +x "$HOME/.sheriff/partage-serveur.sh"

# 2) L'agent launchd : verifie toutes les 20 s, des la session, a chaque boot
cat > "$HOME/Library/LaunchAgents/com.sheriff.partage-serveur.plist" <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.sheriff.partage-serveur</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>exec "$HOME/.sheriff/partage-serveur.sh" &gt;&gt; "$HOME/.sheriff/partage.log" 2>&amp;1</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>StartInterval</key><integer>20</integer>
</dict>
</plist>
EOF

launchctl unload "$HOME/Library/LaunchAgents/com.sheriff.partage-serveur.plist" 2>/dev/null || true
launchctl load "$HOME/Library/LaunchAgents/com.sheriff.partage-serveur.plist"

# 3) Tunnel inverse vers le serveur (port 2222 -> SSH du mini) : reparer/recrer
if [ -f "$HOME/Library/LaunchAgents/com.sheriff.hermes.tunnel.plist" ]; then
  launchctl unload "$HOME/Library/LaunchAgents/com.sheriff.hermes.tunnel.plist" 2>/dev/null || true
  launchctl load "$HOME/Library/LaunchAgents/com.sheriff.hermes.tunnel.plist" 2>/dev/null || true
  echo "Tunnel existant : recharge."
else
  cat > "$HOME/Library/LaunchAgents/com.sheriff.hermes.tunnel.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.sheriff.hermes.tunnel</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/ssh</string>
    <string>-N</string><string>-T</string>
    <string>-o</string><string>ServerAliveInterval=15</string>
    <string>-o</string><string>ServerAliveCountMax=3</string>
    <string>-o</string><string>ExitOnForwardFailure=yes</string>
    <string>-o</string><string>StrictHostKeyChecking=no</string>
    <string>-o</string><string>BatchMode=yes</string>
    <string>-R</string><string>2222:localhost:22</string>
    <string>root@$SERVEUR</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>
</dict>
</plist>
EOF
  launchctl load "$HOME/Library/LaunchAgents/com.sheriff.hermes.tunnel.plist" || true
  echo "Tunnel 2222 recree."
fi

echo "OK ★ Partage d'ecran vers $SERVEUR : relance auto toutes les 20 s + a chaque redemarrage."
echo "Si une fenetre demande un mot de passe, saisis-le une fois et coche « Mémoriser »."
