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

if [[ $EUID -ne 0 ]]; then
  echo "Execute este script como root (use sudo)." >&2
  exit 1
fi

APP_USER="${APP_USER:-galeria}"
APP_DIR="${APP_DIR:-/opt/galeria-servidor}"
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"

echo "==> Preparando usuário $APP_USER"
if ! id "$APP_USER" >/dev/null 2>&1; then
  useradd --system --create-home "$APP_USER"
fi

echo "==> Atualizando apt e instalando dependências"
apt-get update
apt-get install -y curl ca-certificates build-essential sqlite3

if ! command -v node >/dev/null 2>&1; then
  echo "==> Instalando Node.js 20 LTS"
  curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
  apt-get install -y nodejs
fi

echo "==> Copiando projeto para $APP_DIR"
rm -rf "$APP_DIR"
mkdir -p "$APP_DIR"
rsync -a --exclude node_modules "$REPO_DIR/" "$APP_DIR/"

echo "==> Instalando dependências do backend"
pushd "$APP_DIR/server" >/dev/null
npm install --include=dev
if [[ ! -f .env ]]; then
  cp .env.example .env
fi
npm run build
npx prisma generate
npx prisma db push
npm prune --omit=dev
popd >/dev/null

echo "==> Ajustando permissões"
chown -R "$APP_USER":"$APP_USER" "$APP_DIR"
bash "$APP_DIR/scripts/setup_permissions.sh" "$APP_USER" "$APP_USER"

SERVICE_FILE="/etc/systemd/system/galeria-api.service"
cat >"$SERVICE_FILE" <<EOF
[Unit]
Description=Galeria ALPR License API
After=network.target

[Service]
Type=simple
User=$APP_USER
WorkingDirectory=$APP_DIR/server
Environment=NODE_ENV=production
Environment=HOST=0.0.0.0
ExecStart=/usr/bin/env node dist/index.js
Restart=on-failure
RestartSec=5
Environment=PATH=/usr/bin:/bin:/usr/local/bin

[Install]
WantedBy=multi-user.target
EOF

echo "==> Habilitando e iniciando serviço"
systemctl daemon-reload
systemctl enable --now galeria-api.service

echo "Instalação concluída. API disponível em http://<host>:5188"
