#!/usr/bin/env bash
# Intègre l'AppImage CNApnée au bureau Linux (menu, icône, association .cna) — SANS droits root.
# À distribuer sur la page de téléchargement, à côté de l'AppImage.
#
# Usage :
#   ./integrate-cnapnee.sh [chemin/vers/CNApnee-x86_64.AppImage]
#   ./integrate-cnapnee.sh --uninstall     # retire l'intégration (ne supprime pas l'AppImage)
#   ./integrate-cnapnee.sh --help
#
# Sans argument, l'AppImage est cherché dans le dossier courant, à côté du script, puis dans
# ~/Downloads et ~/Téléchargements.
set -euo pipefail

APP_LABEL="CNApnée"
WM_CLASS="CNApnee.UI"                       # doit correspondre à X11PlatformOptions.WmClass de l'app
DEST_DIR="$HOME/Applications"               # emplacement stable de l'AppImage
ICON_DIR="$HOME/.local/share/icons"
DESK_DIR="$HOME/.local/share/applications"
MIME_DIR="$HOME/.local/share/mime"
DESK_FILE="$DESK_DIR/cnapnee.desktop"
ICON_FILE="$ICON_DIR/cnapnee.png"
MIME_FILE="$MIME_DIR/packages/cnapnee.xml"

usage() {
  sed -n '2,11p' "$0" | sed 's/^# \{0,1\}//'
}

refresh_caches() {
  command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database "$DESK_DIR" 2>/dev/null || true
  command -v update-mime-database    >/dev/null 2>&1 && update-mime-database "$MIME_DIR"    2>/dev/null || true
}

uninstall() {
  rm -f "$DESK_FILE" "$ICON_FILE" "$MIME_FILE"
  refresh_caches
  echo "Intégration CNApnée retirée. (L'AppImage lui-même n'a pas été supprimé.)"
}

case "${1:-}" in
  -h|--help)    usage; exit 0 ;;
  --uninstall)  uninstall; exit 0 ;;
esac

# --- Localiser l'AppImage ---------------------------------------------------
APPIMAGE="${1:-}"
if [ -z "$APPIMAGE" ]; then
  for d in "$PWD" "$(cd "$(dirname "$0")" && pwd)" "$HOME/Downloads" "$HOME/Téléchargements"; do
    m="$(ls "$d"/CNApnee*.AppImage 2>/dev/null | head -n1 || true)"
    if [ -n "$m" ]; then APPIMAGE="$m"; break; fi
  done
fi
if [ -z "$APPIMAGE" ] || [ ! -f "$APPIMAGE" ]; then
  echo "AppImage introuvable." >&2
  echo "Usage : $0 [chemin/vers/CNApnee-x86_64.AppImage]" >&2
  exit 1
fi
APPIMAGE="$(readlink -f "$APPIMAGE")"
echo "AppImage : $APPIMAGE"

# --- Copier dans un emplacement stable + rendre exécutable ------------------
mkdir -p "$DEST_DIR"
TARGET="$DEST_DIR/$(basename "$APPIMAGE")"
if [ "$APPIMAGE" != "$TARGET" ]; then
  cp -f "$APPIMAGE" "$TARGET"
  echo "Copié dans $DEST_DIR"
fi
chmod +x "$TARGET"
APPIMAGE="$TARGET"

# --- Extraire l'icône embarquée (sans FUSE) --------------------------------
mkdir -p "$ICON_DIR"
TMP="$(mktemp -d)"
(
  cd "$TMP"
  "$APPIMAGE" --appimage-extract cnapnee.png >/dev/null 2>&1 || \
  "$APPIMAGE" --appimage-extract '.DirIcon'  >/dev/null 2>&1 || \
  "$APPIMAGE" --appimage-extract             >/dev/null 2>&1 || true
)
if   [ -s "$TMP/squashfs-root/cnapnee.png" ]; then cp "$TMP/squashfs-root/cnapnee.png" "$ICON_FILE"
elif [ -s "$TMP/squashfs-root/.DirIcon"    ]; then cp "$TMP/squashfs-root/.DirIcon"    "$ICON_FILE"
else echo "AVERTISSEMENT : icône introuvable dans l'AppImage — le lanceur utilisera une icône générique." ; ICON_FILE="cnapnee"
fi
rm -rf "$TMP"

# --- Type MIME .cna ---------------------------------------------------------
mkdir -p "$MIME_DIR/packages"
cat > "$MIME_FILE" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
  <mime-type type="application/x-cna">
    <comment>Compétition CNApnée</comment>
    <glob pattern="*.cna"/>
  </mime-type>
</mime-info>
EOF

# --- Lanceur .desktop -------------------------------------------------------
mkdir -p "$DESK_DIR"
cat > "$DESK_FILE" <<EOF
[Desktop Entry]
Type=Application
Name=CNApnée
GenericName=Gestion de compétitions d'apnée
Comment=Gestion des compétitions d'apnée en piscine (FFESSM)
Exec="$APPIMAGE" %f
Icon=$ICON_FILE
Categories=Utility;Sports;
MimeType=application/x-cna;
Terminal=false
StartupWMClass=$WM_CLASS
EOF
chmod +x "$DESK_FILE"

# --- Association .cna + rafraîchissement des caches -------------------------
refresh_caches
command -v xdg-mime >/dev/null 2>&1 && xdg-mime default cnapnee.desktop application/x-cna 2>/dev/null || true

echo
echo "Terminé. $APP_LABEL est intégré :"
echo "  • lanceur      : $DESK_FILE"
echo "  • icône        : $ICON_FILE"
echo "  • fichiers .cna associés à l'application"
echo "Cherche « CNApnée » dans la grille d'applications. (Une déconnexion/reconnexion peut être"
echo "nécessaire pour que l'icône du dock s'affiche.)"
