#!/bin/bash
# @WHO:   vps-deploy/api/kds/scripts/deploy.sh
# @WHAT:  Deploy KDS API Server to VPS — setup systemd service
# @PART:  deploy
# @ENTRY: deploy.sh
#
# Usage: ./deploy.sh
# This script should be run on the VPS to set up the KDS API as a systemd service.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
KDS_DIR="$(dirname "$SCRIPT_DIR")"
SERVICE_NAME="kds-api"

echo "🚀 Deploying KDS API Server..."
echo "   Directory: $KDS_DIR"

# ── 1. Install dependencies ──
echo ""
echo "📦 Installing dependencies..."
cd "$KDS_DIR"
npm install

# ── 2. Generate Prisma client ──
echo ""
echo "🔧 Generating Prisma client..."
npx prisma generate

# ── 3. Run database migrations ──
echo ""
echo "🗄️  Running database migrations..."
npx prisma migrate deploy

# ── 4. Seed data (if fresh) ──
if [ "${SEED:-false}" = "true" ]; then
  echo ""
  echo "🌱 Seeding database..."
  npx tsx prisma/seed/index.ts
fi

# ── 5. Build TypeScript ──
echo ""
echo "🔨 Building TypeScript..."
npx tsc

# ── 6. Create systemd service ──
echo ""
echo "⚙️  Creating systemd service: ${SERVICE_NAME}..."

cat > /tmp/${SERVICE_NAME}.service <<EOF
[Unit]
Description=KDS API Server — Kedai Ayam Warisan 81
After=network.target postgresql.service

[Service]
Type=simple
User=www-data
WorkingDirectory=${KDS_DIR}
ExecStart=$(which node) dist/index.js
Restart=on-failure
RestartSec=5
EnvironmentFile=${KDS_DIR}/.env
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
EOF

sudo cp /tmp/${SERVICE_NAME}.service /etc/systemd/system/${SERVICE_NAME}.service
sudo systemctl daemon-reload
sudo systemctl enable ${SERVICE_NAME}
sudo systemctl restart ${SERVICE_NAME}

echo ""
echo "✅ KDS API Server deployed!"
echo "   Service: ${SERVICE_NAME}"
echo "   Port: 3001"
echo "   Health: http://localhost:3001/health"
echo ""
echo "Commands:"
echo "  sudo systemctl status ${SERVICE_NAME}"
echo "  sudo journalctl -u ${SERVICE_NAME} -f"
