#!/usr/bin/env bash
set -euo pipefail

# ===========================
#  install.sh — GUI ONNX only
#  Ubuntu 24.04, Python 3.12
# ===========================

APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_DIR="${APP_DIR}/.venv"
PYTHON_BIN="${PYTHON_BIN:-python3}"
GUI_MODELS="Pseudonymisation_Gui_V5.py"   # nom du fichier GUI (vue unique v5)

usage() {
  cat <<'USAGE'
Usage:
  ./install.sh --setup   # crée .venv + installe requirements (ONNX/Optimum/Transformers inclus)
  ./install.sh --run     # lance la GUI ONNX
  ./install.sh --clean   # supprime le venv .venv
USAGE
}

log() { echo -e "[install] $*"; }
die() { echo -e "[install:ERROR] $*" >&2; exit 1; }
exists() { command -v "$1" >/dev/null 2>&1; }

ensure_python() {
  exists "${PYTHON_BIN}" || die "Python introuvable. Installez python3 (sudo apt-get install -y python3 python3-venv)."
  log "Python: $(${PYTHON_BIN} -V)"
}

ensure_venv() {
  if [[ ! -d "${VENV_DIR}" ]]; then
    log "Création du virtualenv (.venv)…"
    "${PYTHON_BIN}" -m venv "${VENV_DIR}" || die "Échec création venv."
  fi
  # shellcheck disable=SC1091
  source "${VENV_DIR}/bin/activate"
  python -m pip install --upgrade pip setuptools wheel >/dev/null
}

install_requirements() {
  # shellcheck disable=SC1091
  source "${VENV_DIR}/bin/activate"
  [[ -f "${APP_DIR}/requirements.txt" ]] || die "requirements.txt introuvable à la racine du projet."
  log "Installation des dépendances (requirements.txt)…"
  pip install -r "${APP_DIR}/requirements.txt"
  # docTR pour OCR de PDF scannés (optionnel, nécessite torch)
  log "Installation de docTR pour l'OCR (optionnel)…"
  pip install "python-doctr[torch]" || log "⚠ docTR non installé (optionnel – OCR désactivé pour les PDF scannés)"
}

run_gui_models() {
  # shellcheck disable=SC1091
  source "${VENV_DIR}/bin/activate"
  export PYTHONUTF8=1
  [[ -f "${APP_DIR}/${GUI_MODELS}" ]] || die "Fichier ${GUI_MODELS} introuvable à la racine du projet."
  # Vérif onnxruntime
  python - <<'PY' || (echo "[install] ONNX Runtime manquant (vérifiez requirements)."; exit 1)
import onnxruntime as ort
print("onnxruntime OK:", ort.__version__)
PY
  log "Lancement: ${GUI_MODELS}"
  exec python "${APP_DIR}/${GUI_MODELS}"
}

clean_venv() {
  [[ -d "${VENV_DIR}" ]] && rm -rf "${VENV_DIR}"
  log "Venv supprimé."
}

MODE="${1:-}"
[[ -z "${MODE}" ]] && { usage; exit 0; }

ensure_python

case "${MODE}" in
  --setup)
    ensure_venv
    install_requirements
    log "✅ Installation terminée. Lancez: ./install.sh --run"
    ;;
  --run)
    ensure_venv
    run_gui_models
    ;;
  --clean)
    clean_venv
    ;;
  *)
    usage; exit 1 ;;
esac
