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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_ROOT="${VOZEX_BACKEND_ROOT:-/www/wwwroot/vozex/backend}"
PHP_BIN="${VOZEX_PHP_BIN:-php}"
RUN_USER="${VOZEX_RUN_USER:-www}"
QUEUE_CONNECTION="${VOZEX_QUEUE_CONNECTION:-redis}"
WORKER_NAME="${VOZEX_QUEUE_SERVICE_NAME:-vozex-queue}"
SYSTEMD_DIR="${VOZEX_SYSTEMD_DIR:-/etc/systemd/system}"
CRON_PATH="${VOZEX_CRON_PATH:-/etc/cron.d/vozex-scheduler}"
BIN_DIR="${VOZEX_BIN_DIR:-/usr/local/bin}"

if [ ! -f "${BACKEND_ROOT}/artisan" ]; then
  echo "[install-managed-hosting] Laravel artisan not found in ${BACKEND_ROOT}" >&2
  exit 1
fi

install -d "${BIN_DIR}"
install -m 0755 "${SCRIPT_DIR}/proxy-sync.sh" "${BIN_DIR}/vozex-proxy-sync"
install -m 0755 "${SCRIPT_DIR}/ssl-issue.sh" "${BIN_DIR}/vozex-ssl-issue"

cat > "${SYSTEMD_DIR}/${WORKER_NAME}.service" <<EOF
[Unit]
Description=Vozex queue worker
After=network.target

[Service]
Type=simple
User=${RUN_USER}
Group=${RUN_USER}
WorkingDirectory=${BACKEND_ROOT}
ExecStart=${PHP_BIN} artisan queue:work ${QUEUE_CONNECTION} --sleep=3 --tries=3 --max-time=3600 --timeout=300
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

cat > "${CRON_PATH}" <<EOF
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* * * * * ${RUN_USER} cd ${BACKEND_ROOT} && ${PHP_BIN} artisan schedule:run >> /dev/null 2>&1
EOF

systemctl daemon-reload
systemctl enable --now "${WORKER_NAME}.service"

printf '%s\n' "Installed:"
printf '  %s\n' "${BIN_DIR}/vozex-proxy-sync"
printf '  %s\n' "${BIN_DIR}/vozex-ssl-issue"
printf '  %s\n' "${SYSTEMD_DIR}/${WORKER_NAME}.service"
printf '  %s\n' "${CRON_PATH}"
