#!/bin/bash
set -euo pipefail

ENVIRONMENT=prod
REMOTE_HOST="sc1kuku8645@sc1kuku8645.universe.wf"
REMOTE_BASE=""
RUN_NPM_INSTALL=true

for arg in "$@"; do
  case $arg in
    --env=*) ENVIRONMENT="${arg#*=}" ;; 
    --prod) ENVIRONMENT=prod ;; 
    --staging) ENVIRONMENT=staging ;; 
    --preprod) ENVIRONMENT=preprod ;; 
    --demo) ENVIRONMENT=demo ;; 
    --pilot) ENVIRONMENT=pilot ;; 
    --remote=*) REMOTE_HOST="${arg#*=}" ;; 
    --no-install) RUN_NPM_INSTALL=false ;; 
  esac
done

ENVIRONMENT="$(echo "$ENVIRONMENT" | tr '[:upper:]' '[:lower:]')"

case "$ENVIRONMENT" in
  prod)    REMOTE_BASE="/home/sc1kuku8645/prod/v3/admin" ;; 
  staging) REMOTE_BASE="/home/sc1kuku8645/staging/v3/admin" ;; 
  preprod) REMOTE_BASE="/home/sc1kuku8645/preprod/v3/admin" ;; 
  demo)    REMOTE_BASE="/home/sc1kuku8645/demo/v3/admin" ;; 
  pilot)   REMOTE_BASE="/home/sc1kuku8645/pilot/v3/admin" ;; 
  *) echo "[error] Environnement inconnu: $ENVIRONMENT"; exit 1 ;; 
esac

ENV_FILE=".env.$ENVIRONMENT"
if [ ! -f "$ENV_FILE" ]; then
  echo "[error] Fichier d\'environnement introuvable: $ENV_FILE"
  exit 1
fi

ENV_BACKUP=""
restore_env() {
  if [ -n "${ENV_BACKUP:-}" ] && [ -f "$ENV_BACKUP" ]; then
    cp -f "$ENV_BACKUP" .env || true
    rm -f "$ENV_BACKUP" || true
  fi
}
trap restore_env EXIT INT TERM

if [ -f .env ]; then
  ENV_BACKUP=".env.backup.$(date +%s)"
  cp -f .env "$ENV_BACKUP"
fi
cp -f "$ENV_FILE" .env

WELL_KNOWN_DIR="public/.well-known"
WELL_KNOWN_SRC="$WELL_KNOWN_DIR/oauth-protected-resource.$ENVIRONMENT.json"
WELL_KNOWN_DEST="$WELL_KNOWN_DIR/oauth-protected-resource.json"
if [ -f "$WELL_KNOWN_SRC" ]; then
  mkdir -p "$WELL_KNOWN_DIR"
  cp -f "$WELL_KNOWN_SRC" "$WELL_KNOWN_DEST"
  echo "[info] MCP: well-known file copied ($WELL_KNOWN_SRC -> $WELL_KNOWN_DEST)"
fi

# Build Client
echo "[info] Building Client..."
if [ -d "client" ]; then
  if [ "$RUN_NPM_INSTALL" = true ]; then
    (cd client && npm install)
  fi
  (cd client && npm run build)
else
  echo "[error] Client directory not found!"
  exit 1
fi

# Build Server
echo "[info] Building Server..."
npm run build

REMOTE_PATH="$REMOTE_BASE/mcp-server"
echo "[info] Rsync MCP -> $REMOTE_HOST:$REMOTE_PATH"
rsync -azP --delete \
  --exclude=.git \
  --exclude=node_modules \
  --exclude=client/node_modules \
  --exclude=.env.* \
  --exclude=logs \
  -e "ssh -p 22" \
  ./ "$REMOTE_HOST:$REMOTE_PATH"

if [ "$RUN_NPM_INSTALL" = true ]; then
  ssh -p 22 "$REMOTE_HOST" "cd \"$REMOTE_PATH\" && npm install --omit=dev"
fi

ssh -p 22 "$REMOTE_HOST" "cd \"$REMOTE_PATH\" && mkdir -p tmp && touch tmp/restart.txt"

echo "[info] MCP deploy termine ($ENVIRONMENT)."
