#!/usr/bin/env bash
# Ajoute un compte PhotoSync ISOLE (Modele C : 1 instance d'agent par utilisateur).
# Chaque utilisateur a : son partage QNAP monte avec SON compte (isolation native
# QNAP), sa racine NAS dediee, son port, son token. L'agent (server.js) est partage
# et INCHANGE ; safeJoin le cloisonne deja a sa NAS_ROOT.
#
# A lancer SUR LE PI, en sudo :
#   sudo ./add-photosync-user.sh <instance> <partage_qnap> <user_qnap> <port>
# Ex : sudo ./add-photosync-user.sh alexia PhotoAlexia_IOS2026 Alexia 8081
#
# Le mot de passe QNAP est demande de facon MASQUEE (jamais en argument/historique).
# Pre-requis : photosync-agent@.service installe dans /etc/systemd/system/,
#              le code agent dans /home/taaazzz/photosync-agent/server.js.
set -euo pipefail

NAS_HOST="${NAS_HOST:-192.168.1.124}"

[ "$(id -u)" -eq 0 ] || { echo "Lance en sudo."; exit 1; }
[ $# -eq 4 ] || { echo "Usage: sudo $0 <instance> <partage_qnap> <user_qnap> <port>"; exit 1; }
INST="$1"; SHARE="$2"; QUSER="$3"; PORT="$4"

[[ "$INST" =~ ^[a-z0-9]+$ ]] || { echo "instance : a-z0-9 uniquement"; exit 1; }
[[ "$PORT" =~ ^[0-9]+$ ]] && [ "$PORT" -ge 1024 ] && [ "$PORT" -le 65535 ] || { echo "port invalide"; exit 1; }
[ -f /etc/systemd/system/photosync-agent@.service ] || { echo "template photosync-agent@.service absent"; exit 1; }

read -r -s -p "Mot de passe QNAP de $QUSER : " QPASS; echo
[ -n "$QPASS" ] || { echo "mot de passe vide"; exit 1; }

CRED="/etc/photosync-$INST.cred"
ENVF="/etc/photosync-agent.$INST.env"
ROOT="/mnt/nas-$INST"
TOKEN="$(openssl rand -hex 24)"

umask 077
# 1) creds CIFS = compte QNAP de l'utilisateur (600 root)
printf 'username=%s\npassword=%s\n' "$QUSER" "$QPASS" > "$CRED"
chmod 600 "$CRED"; chown root:root "$CRED"

# 2) montage du partage avec SON compte (isolation native QNAP) + fstab persistant
mkdir -p "$ROOT/$SHARE"
# IMPORTANT : umask 077 (ci-dessus, pour les secrets) a cree $ROOT en 700 root ->
# l'agent (user taaazzz) ne pourrait pas TRAVERSER le point de montage et listShares
# renverrait vide. La racine de montage doit etre traversable (755).
chmod 755 "$ROOT" "$ROOT/$SHARE"
LINE="//$NAS_HOST/$SHARE $ROOT/$SHARE cifs credentials=$CRED,vers=3.0,uid=taaazzz,gid=taaazzz,iocharset=utf8,_netdev,nofail,x-systemd.automount 0 0"
grep -qF " $ROOT/$SHARE " /etc/fstab || echo "$LINE" >> /etc/fstab
systemctl daemon-reload
mount -a || true
mountpoint -q "$ROOT/$SHARE" || echo "⚠️  montage non actif (verifie le mot de passe / le nom de partage)"

# 3) EnvironmentFile de l'instance (600 root). META_ROOT dans SON espace ecrivable.
printf 'NAS_ROOT=%s\nPHOTOSYNC_META_ROOT=%s\nPHOTOSYNC_TOKEN=%s\nPORT=%s\nPHOTOSYNC_DEFAULT_SHARE=%s\n' \
  "$ROOT" "$ROOT/$SHARE" "$TOKEN" "$PORT" "$SHARE" > "$ENVF"
chmod 600 "$ENVF"; chown root:root "$ENVF"

# 4) instance systemd
systemctl enable --now "photosync-agent@$INST"
sleep 1
if ! systemctl is-active --quiet "photosync-agent@$INST"; then
  echo "❌ instance non active :"; journalctl -u "photosync-agent@$INST" -n 20 --no-pager; exit 1
fi

# 5) firewall : port ouvert depuis le LAN (le tailnet est deja autorise via tailscale0)
ufw allow from 192.168.1.0/24 to any port "$PORT" proto tcp comment "PhotoSync $INST" >/dev/null 2>&1 || true

# 6) QR de connexion pour l'app (mode Agent) — via l'IP Tailscale (joignable partout)
TSIP="$(tailscale ip -4 2>/dev/null | head -1 || true)"
URL="http://${TSIP:-$NAS_HOST}:$PORT"
PAYLOAD="{\"v\":1,\"agent\":{\"url\":\"$URL\",\"token\":\"$TOKEN\"}}"
echo
echo "================ Compte '$INST' pret ================"
echo "URL    : $URL"
echo "Token  : $TOKEN"
echo "Racine : $ROOT/$SHARE  (compte QNAP : $QUSER)"
echo "QR     : $PAYLOAD"
if command -v qrencode >/dev/null 2>&1; then
  echo; qrencode -t ANSIUTF8 "$PAYLOAD"
  echo "→ Scanne ce QR depuis l'app (ecran de connexion) pour configurer ce compte."
else
  echo "(pour un QR scannable : sudo apt install -y qrencode, puis relance l'affichage)"
fi
