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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
ENV_FILE="${ENV_FILE:-${REPO_DIR}/deploy/env/cam1.env}"
OUT_DIR="${OUT_DIR:-${REPO_DIR}/.rendered}"

if [[ ! -f "${ENV_FILE}" ]]; then
  echo "Missing env file: ${ENV_FILE}"
  exit 1
fi

source "${ENV_FILE}"

: "${CAM1_SOURCE_RTSP:?CAM1_SOURCE_RTSP must be set in ${ENV_FILE}}"

SITE_DOMAIN="${SITE_DOMAIN:-dev.cc-group.org}"
SITE_ROOT="${SITE_ROOT:-/var/www/${SITE_DOMAIN}}"
LETSENCRYPT_EMAIL="${LETSENCRYPT_EMAIL:-admin@example.com}"

if [[ -z "${WS_RTSP_TOKEN:-}" ]]; then
  WS_RTSP_TOKEN="$(openssl rand -hex 16)"
fi

mkdir -p "${OUT_DIR}"

escape_sed() {
  printf '%s' "$1" | sed -e 's/[\/&]/\\&/g'
}

SITE_DOMAIN_ESCAPED="$(escape_sed "${SITE_DOMAIN}")"
SITE_ROOT_ESCAPED="$(escape_sed "${SITE_ROOT}")"
EMAIL_ESCAPED="$(escape_sed "${LETSENCRYPT_EMAIL}")"
RTSP_ESCAPED="$(escape_sed "${CAM1_SOURCE_RTSP}")"
TOKEN_ESCAPED="$(escape_sed "${WS_RTSP_TOKEN}")"

sed \
  -e "s/__SITE_DOMAIN__/${SITE_DOMAIN_ESCAPED}/g" \
  -e "s/__SITE_ROOT__/${SITE_ROOT_ESCAPED}/g" \
  -e "s/__LETSENCRYPT_EMAIL__/${EMAIL_ESCAPED}/g" \
  "${REPO_DIR}/deploy/apache/dev.cc-group.org.conf" \
  > "${OUT_DIR}/${SITE_DOMAIN}.conf"

sed \
  -e "s/__SITE_DOMAIN__/${SITE_DOMAIN_ESCAPED}/g" \
  -e "s/__SITE_ROOT__/${SITE_ROOT_ESCAPED}/g" \
  -e "s/__LETSENCRYPT_EMAIL__/${EMAIL_ESCAPED}/g" \
  "${REPO_DIR}/deploy/apache/dev.cc-group.org-le-ssl.conf.template" \
  > "${OUT_DIR}/${SITE_DOMAIN}-le-ssl.conf"

sed \
  -e "s#__CAM1_SOURCE_RTSP__#${RTSP_ESCAPED}#g" \
  "${REPO_DIR}/deploy/systemd/cam1.service.template" \
  > "${OUT_DIR}/cam1.service"

sed \
  -e "s/__WS_RTSP_TOKEN__/${TOKEN_ESCAPED}/g" \
  "${REPO_DIR}/deploy/ws_rtsp/ws_rtsp.ini" \
  > "${OUT_DIR}/ws_rtsp.ini"

echo "Rendered templates to ${OUT_DIR}"
